正则表达式可以断言子匹配中的2个相等吗?

时间:2018-08-04 08:30:08

标签: regex

让我们说说这个简单的正则表达式

(?P<first>\d+)\.(?P<second>\d+)

它可以匹配“ 123.456”之类的字符串,从而使

first -> 123, second -> 456

根据此示例,是否有办法断言“第一”应等于“第二”,否则输入字符串将不匹配?

2 个答案:

答案 0 :(得分:4)

您可以在捕获组中捕获点前的前几位,并在点后使用backreference进行分组1:

(?P<first>\d+)\.(?P<second>\1)

或者您可以通过name引用第一个捕获组:

(?P<first>\d+)\.(?P<second>(?P=first))

根据UnbearableLightness的评论,您可以使用word boundaries \b或使用锚点^$来声明行的开始和结束。

\b(?P<first>\d+)\.(?P<second>(?P=first))\b

答案 1 :(得分:2)

您可以在表达式1中向后引用匹配的组:

^(?P<first>\d+)\.(?P<second>\1)$

您可以实时here对其进行检查。