preg_replace("/(/s|^)(php|ajax|c\+\+|javascript|c#)(/s|$)/i", '$1#$2$3', $somevar);
这意味着将PHP转换为#PHP。
Warning: preg_replace(): Unknown modifier '|'
答案 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指出,实际的错误是你应该使用反斜杠而不是斜杠)。