我想匹配一行文本末尾的可选标签。
示例输入文本:
The quick brown fox jumps over the lazy dog {tag}
我想匹配花括号中的部分并创建对它的反向引用。
我的正则表达式是这样的:
^.*(\{\w+\})?
(有点简化,我也在标签之前匹配部分):
它匹配行 ok(有和没有标签)但不创建对标签的反向引用。
如果我删除 '?'字符,所以正则表达式是:
^.*(\{\w+\})
它创建了对标签的反向引用,但随后不匹配没有标签的行。
我从http://www.regular-expressions.info/refadv.html了解到可选运算符不会影响反向引用:
Round brackets group the regex between them. They capture the text matched by the regex inside them that can be reused in a backreference, and they allow you to apply regex operators to the entire grouped regex.
但一定是误会了什么。
如何使标记部分成为可选的并在它存在时创建反向引用?
请您参考如下方法:
这不是反向引用问题,问题是仅通过读取匹配 .* 的文本就满足了正则表达式。它并不觉得有必要继续阅读以阅读可选的结束标记。如果您真正阅读到行尾,最简单的解决方案是附加 $(美元符号)以强制正则表达式匹配整行。
编辑
顺便说一句,我没有按字面意思理解你的正则表达式,因为你说它匹配其他东西,但要清楚 .* 会消耗整行。您需要像 [^{]* 这样的东西来防止标签被吞噬。我猜这对您来说不是问题。
