Я только что получил помощь от всех вас в другой проблеме, и мне было интересно, можно ли легко решить и эту мою следующую проблему.
По сути, из-за того, что я застрял в плохо конвертированном файле PDF в Excel, у меня много повторяющихся предложений в каждой ячейке.
Например:
$bad_string = "B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >";
$good_string = goodFunction($bad_String);
//echo 'B7R, B9R, B12R, B12M 430mm Disc 2005 >'
Как, черт возьми, это возможно?
Условие состоит в том, что плохая строка повторяется X раз. Он никогда не меняется, он просто копируется и вставляется на место много раз (из-за плохого преобразования PDF в Exel)
Есть ли какое-либо решение для этого?
Я бы использовал preg_replace
, Я предполагаю, что дублированные строки находятся в непрерывной форме.
$bad_string = "B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >";
echo preg_replace('~^(.*?)\1+$~', '\1', $bad_string);
Выход:
B7R, B9R, B12R, B12M 430mm Disc 2005 >
Если предложения должны заканчиваться >
символ, то вы можете использовать это регулярное выражение.
(.*?>)(?=(?:.*?\1)+$)
$bad_string = "foo B7R, B9R, B12R, B12M 430mm Disc 2005 > bar B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >B7R, B9R, B12R, B12M 430mm Disc 2005 >";
echo preg_replace('~(.*?>)(?=(?:.*?\1)+$)~', '', $bad_string);
Выход:
foo bar B7R, B9R, B12R, B12M 430mm Disc 2005 >
Других решений пока нет …