PHP Regex не соответствует всему возможному слову

Я создаю скрипт, который разрезает ненужные части строки, но оставляет остальную часть. У меня странная проблема - созданное мной регулярное выражение соответствует строке, но не для всех возможных знаков.

Протестированная строка:

$itemFullName = "10-16X4 POLI MG SELF START BLK PLASTIC";

"Шаблон" У меня есть:

POLI MG FT SDS BLK ZC

Код PHP:

if(preg_match("@(POLI){1}(.)+(BLK)@", $itemFullName))
{
 $itemAttributes = preg_replace("@(POLI){1}(.)+(BLK)@", "#", $itemFullName);
}

И finaly $ itemAttributes:

"10-16X4 #K PLASTIC".

Посмотрите, как regex ловит только [POLI MG SELF START BL] K part и меняет его на "#" вместо целого матча POLI MG SELF START BLK и заменяет его.

Как я могу это исправить?

1 ответ

Нет необходимости запускать preg_match до preg_replace. Если шаблон не соответствует, вы preg_replace исходную строку, возвращаемую из preg_replace. Также вам необходимо упростить регулярное выражение, попробуйте этот код:

$itemAttributes = preg_replace('@\bPOLI\b.*?\bBLK\b@', '#', $itemFullName);

Я обернул начальную и конечную строку в \b (границы слов), чтобы избежать совпадения неожиданных совпадений, таких как POLICY

licensed under cc by-sa 3.0 with attribution.