Вложение функций preg_replace при экранировании токенов - PullRequest
0 голосов
/ 01 сентября 2010

Я использую модификатор 'e' в preg_replace для поиска заданной строки. Затем мне нужно, чтобы он просматривал в этой строке отдельные совпадения, используя другой оператор preg_replace:

$str = "This is FOO.";
$str = preg_replace('/(foo)/ie', "x$1", $str);
echo $str;

Будет сгенерировано: This is xFOO.
Теперь мне нужно гнездиться. (Я вкладываю, потому что мне нужно сопоставить неизвестное число групп в отдельные токены, что невозможно с помощью одного оператора preg_replace, как обсуждалось в другом месте на этом форуме. Я явно упростил этот код, чтобы сосредоточиться на своем вопросе).

$str = "This is FOO.";
$str = preg_replace('/(foo)/ie', "preg_replace('/(\w)/i','x$1','$1')", $str);
echo $str;

Мне это нужно для генерации This is xFxOxO.
Но вместо этого он генерирует This is xFOOxFOOxFOO.

Когда php вычисляет вторую строку кода, он заменяет оба токена $ 1 соответствующей строкой foo. Мне нужно, чтобы он проигнорировал первый токен за 1 доллар, потому что он должен оцениваться внутренним оператором preg_replace. Как я могу избежать первого токена $ 1, чтобы он не оценивался внешним оператором preg_replace?

1 Ответ

1 голос
/ 01 сентября 2010

вы можете обмануть парсер чем-то вроде

$str = preg_replace('/(foo)/ie', "preg_replace('/(\w)/i','x$'.'1','$1')", $str);

но, если честно, это выглядит совершенно безобразно. Возможно, вы захотите рассказать нам больше о проблеме, я уверен, что есть лучшие способы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...