我有一个正则表达式
|^(/[a-z]{2})?/?(php)/([-a-z0-9]+)/?/?$|与/php/anything相匹配。
现在我想要一个正则表达式来匹配这两个
/php/anything
/java/anything我试过|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|,但它不工作。
有人能帮我解决这个问题吗?我想保留所有其他部分,但只更改(php)部分。
以下是代码
preg_match("|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|", 'php/anything')但是我收到了这个警告并且匹配不起作用
Warning: preg_match(): Unknown modifier 'j' 谢谢
发布于 2012-12-14 20:26:20
您使用|作为正则表达式分隔符,但是在正则表达式中有一个|作为更改,您需要对其进行转义。如果不这样做,第二个|将被视为正则表达式的末尾,它后面的字母j将被视为正则表达式修饰符。由于j不是有效的修饰符,因此会出现错误。
将|转义为:
preg_match("|^(/[a-z]{2})?/?(php\|java)/([-a-z0-9]+)/?/?$|", 'php/anything')
^或者您可以使用不同的分隔符对:
preg_match("~^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$~", 'php/anything')
^ ^发布于 2012-12-14 20:25:43
问题很简单,您正在使用竖线符号作为分隔模式的字符。因此,您需要转义模式本身中的竖线符号,或者只需将分隔符更改为不会在模式中使用的其他分隔符:
#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$#
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$}等。
https://stackoverflow.com/questions/13878530
复制相似问题