1

我有一个正则表达式

|^(/[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' 

谢谢

4

2 回答 2

1

问题只是您使用管道符号作为分隔模式的字符。因此,您需要在模式本身中转义管道符号,或者只需将分隔符更改为您不会在模式中使用的其他内容:

#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$#
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$}

等等

于 2012-12-14T12:25:43.303 回答
1

您正在|用作正则表达式分隔符,但您|在正则表达式内部有一个作为更改,您需要转义。如果你不这样做,第二个|被视为正则表达式的结尾,它后面的字母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-14T12:26:19.863 回答