Что не так с этим запросом php / regex? - PullRequest
2 голосов
/ 14 августа 2010
preg_replace("/(/s|^)(php|ajax|c\+\+|javascript|c#)(/s|$)/i", '$1#$2$3', $somevar);

Он предназначен для преобразования, например, PHP в # PHP.

Warning: preg_replace(): Unknown modifier '|'

Ответы [ 2 ]

3 голосов
/ 14 августа 2010

Это потому, что вы используете косую черту (/) в качестве разделителя. Когда движок регулярных выражений достигает значения /s (3-й символ), он думает, что регулярное выражение завершено, а остальные являются модификаторами. Но такого модификатора (|) не существует, поэтому ошибка.

В следующий раз вы можете:

  • Измените разделители на то, что вы не будете использовать в своем регулярном выражении, например:

    preg_replace("!(/s|^)(php|ajax|c\+\+|javascript|c#)(/s|$)!i", '$1#$2$3', $somevar);

  • Или экранировать символы с обратной косой чертой, например: "/something\/else/"*

Я также подозреваю, что вы не намеревались использовать /s, но escape-символ \s, который соответствует пробельным символам.

2 голосов
/ 14 августа 2010

Первый символ в регулярном выражении - это разделитель. Если вам нужно использовать это внутри вашего регулярного выражения, тогда вам нужно экранировать его:

"/(\/s|^)...
   ^

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

"~(/s|^)...(/s|$)~i"

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

(хотя, как указывает исключение NullUserException, фактическая ошибка заключается в том, что вы должны использовать обратную косую черту вместо косой черты).

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