preg_match (): ошибка компиляции: нераспознанный символ - PullRequest
0 голосов
/ 05 июня 2018

Извините за мой английский.

$string = "product#[:id]#[:str]";

$regex = preg_replace("/\[:(\w+)\]/", "(?<$1>.+?)", $string);

То, что я получаю product#(?.+?)#(?.+?) вместо product#(?<id>.+?)#(?<str>.+?)

Я хочу сделать это, потому что мне нужен preg_match () для создания имен ключейв $ match:

preg_match('/^'. $regex .'$/', str_replace("/", "#", self::$path), $matches)

Дело в том, что он работает без '<' и '>'.Но они мне нужны для следующего кода.Так что мне делать с этими символами <, '>?Я нуждаюсь в них, но не знаю, что делать.Я также пытался избежать их: \ <(но безрезультатно). </p>

Пожалуйста, помогите мне, если у вас есть какие-либо идеи.

Редактировать:

Похоже, то, что я сделал, былоХорошо.Теперь появилась новая проблема:

$string = "product#[i:id]#[*:str]";

$regex = preg_replace("/\[i:(\w+)\]/", "(?<$1>[0-9]+)", $regex);
$regex = preg_replace("/\[\*:(\w+)\]/", "(?<$1>.+?)", $regex);

Нет, я пробовал что-то еще, и это не работает.Зачем?(

1 Ответ

0 голосов
/ 05 июня 2018

Если результат вашего preg_replace должен быть обработан в браузере, и только этот обработанный результат должен содержать < и > символов, то вы должны сгенерировать их как &lt;и &gt;.

Так что, возможно, ваша замещающая строка (2-й аргумент preg_replace) должна быть:

(?&lt;$1&gt;.+?)
...