我有一个正则表达式
|^(/[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'
由于
答案 0 :(得分:1)
问题只是你使用管道标志作为界定你的模式的字符。因此,您需要在模式本身内转义管道符号,或者只需将分隔符更改为您不会在模式中使用的其他内容:
#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$#
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$}
等
答案 1 :(得分: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')
^ ^