这个php / regex查询有什么问题?

时间:2010-08-14 01:24:20

标签: php regex

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

这意味着将PHP转换为#PHP。

Warning: preg_replace(): Unknown modifier '|'

2 个答案:

答案 0 :(得分:3)

这是因为您使用正斜杠(/)作为分隔符。当正则表达式引擎到达/s(第3个字符)时,它认为正则表达式结束,其余部分是修饰符。但是不存在这样的修饰符(|),因此存在错误。

下次,你可以:

  • 将您的分隔符更改为您在正则表达式中不会使用的内容,即:

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

  • 或者使用反斜杠转义这些字符,即:"/something\/else/" *

我还怀疑你不打算使用/s,而是使用与空格字符匹配的转义字符\s

答案 1 :(得分:2)

正则表达式中的第一个字符是分隔符。如果你需要在正则表达式中使用它,那么你需要转义它:

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

或者,选择另一个在正则表达式中没有使用的分隔符,这样就不需要转义:

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

我更喜欢做后者,因为它使正则表达式更具可读性。

(尽管NullUserException指出,实际的错误是你应该使用反斜杠而不是斜杠)。