繁体   English   中英

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

[英]What's wrong with this php/regex query?

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

例如,它打算将PHP变成#PHP。

Warning: preg_replace(): Unknown modifier '|'

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

下次,您可以:

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

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

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

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

正则表达式中的第一个字符是定界符。 如果您需要在正则表达式中使用此函数,则需要对其进行转义:

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

或者,选择另一个不在正则表达式中使用的定界符,这样就无需转义:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM