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

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

/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支持.

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...