首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_match管道标志

preg_match管道标志
EN

Stack Overflow用户
提问于 2012-12-14 20:16:49
回答 2查看 2.8K关注 0票数 1

我有一个正则表达式

代码语言:javascript
复制
|^(/[a-z]{2})?/?(php)/([-a-z0-9]+)/?/?$|

/php/anything相匹配。

现在我想要一个正则表达式来匹配这两个

代码语言:javascript
复制
/php/anything
/java/anything

我试过|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|,但它不工作。

有人能帮我解决这个问题吗?我想保留所有其他部分,但只更改(php)部分。

以下是代码

代码语言:javascript
复制
preg_match("|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|", 'php/anything')

但是我收到了这个警告并且匹配不起作用

代码语言:javascript
复制
Warning: preg_match(): Unknown modifier 'j' 

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-14 20:26:20

您使用|作为正则表达式分隔符,但是在正则表达式中有一个|作为更改,您需要对其进行转义。如果不这样做,第二个|将被视为正则表达式的末尾,它后面的字母j将被视为正则表达式修饰符。由于j不是有效的修饰符,因此会出现错误。

|转义为:

代码语言:javascript
复制
preg_match("|^(/[a-z]{2})?/?(php\|java)/([-a-z0-9]+)/?/?$|", 'php/anything')
                                ^

或者您可以使用不同的分隔符对:

代码语言:javascript
复制
preg_match("~^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$~", 'php/anything')
            ^                                           ^
票数 1
EN

Stack Overflow用户

发布于 2012-12-14 20:25:43

问题很简单,您正在使用竖线符号作为分隔模式的字符。因此,您需要转义模式本身中的竖线符号,或者只需将分隔符更改为不会在模式中使用的其他分隔符:

代码语言:javascript
复制
#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$#
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$}

等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13878530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档