微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 正则表达式双方面组件

对不起令人困惑的标题,我想不出正确的措辞.我试图理解是否有一种方法可以使正则表达式匹配不同的字符串,具体取决于是否捕获了先前的捕获组.

/th?u(e|r)sday/

这个星期二,星期四,也是星期二和星期四.有没有办法在正则表达式中指出一个部分应该只匹配,如果前一个部分匹配…所以我想象一个潜在的语法,如…(?#:pattern)其中#是来自捕获组的数字,如果捕获的组被捕获,则包含模式,否则跳过.如果未捕获#th组,则采用类似的模式(!#:pattern).这个发明的语法是为了演示我想要做的事情.有了这个发明的语法,我可以像这样解决上面的问题……

/t(h)?u(!1:e)(?1:r)sday/

在regex中是否有任何这样的语法来实现这种类型的引用?

解决方法

某些正则表达式实现中确实存在此功能,您示例中的正则表达式将按如下方式编写:

/t(h)?u(?(1)r|e)sday/

显然这不是最好的例子,因为/ t(hur | ue)sday /等效且更短,但有些情况下这更有用.

查看this advanced regex reference page表中的倒数第二个元素,以及有关条件here的其他信息.

>语法:

(?(1)then|else)

>说明:

If the first capturing group took part in the match attempt thus far,the “then” part must match for the overall regex to match. If the first capturing group did not take part in the match,the “else” part must match for the overall regex to match.

>示例:

(a)?(?(1)b | c)匹配babxcac中的ab,第一个c和第二个c

根据同一页面,条件由JGsoft engine,Perl,PCRE.NET framework支持.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐