[英]Regex: a number vs. a backreference to a capture group
我一直在研究正则表达式,我对这个正在挠头。 在此页面 ( https://www.regular-expressions.info/conditional.html ) 上,我看到,在条件正则表达式中,对编号反向引用的引用只是一个数字。 例如,
(a)?b(?(1)c|d)
正则表达式如何知道我们不应该匹配数字“1”而不是对第一个捕获组的反向引用? 以前在课程中我了解到会转义反向引用,例如 \\1、\\2 等。
根据正则表达式教程,您正在关注:
一个特殊的结构
(?ifthen|else)
允许您创建条件正则表达式。 如果 if 部分的计算结果为 true,则正则表达式引擎将尝试匹配 then 部分。 否则,将尝试使用 else 部分。 语法由一对括号组成。 左括号后面必须跟一个问号,紧跟在 if 部分,紧跟在 then 部分。 这部分后面可以跟一个竖线和 else 部分。 你可以省略 else 部分,以及它的竖线。
或者,您可以在 if 部分检查到目前为止是否有捕获组参与了比赛。 将捕获组的编号放在括号内,并将其用作 if 部分。
你的第二个问题是这样的:
请注意,我添加了单词边界以避免部分匹配像abd
这样的字符串。
如果有人真的想以这种方式匹配文字 1 怎么办?
有效输入:
1c
或d
无效输入:1d
那将是:
\b(1)?(?(1)c|d)\b
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.