正则表达式反向引用乘法[重复]
Posted
技术标签:
【中文标题】正则表达式反向引用乘法[重复]【英文标题】:Regex Backeference Multiplying [duplicate] 【发布时间】:2019-05-06 16:11:01 【问题描述】:我正在尝试学习正则表达式,我尝试解决的练习之一如下:
我有一个字符串:
"london new york"
我正在尝试匹配正则表达式。
模式是这样的:
r"(..o(.)).+(\2)*"
结果是ndon new york
。
据我了解, (\2) 匹配 n
但什么匹配 ew york
?
还有*
中的(\2)*
有什么作用?是否尝试匹配n
或特殊字符.
?
【问题讨论】:
(\2)*
可以匹配一个空字符串,因为它是 *
量化的。 .+
有效匹配整行的其余部分。
这里需要实现什么?请解释规则、你需要得到什么以及为什么。
【参考方案1】:
这样看
( # (1 start)
. . o
( . ) # (2)
) # (1 end)
( .+ ) # (3)
( \2 )* # (4)
** Grp 0 - ( pos 2 : len 13 )
ndon new york
** Grp 1 - ( pos 2 : len 4 )
ndon
** Grp 2 - ( pos 5 : len 1 )
n
** Grp 3 - ( pos 6 : len 9 )
new york
** Grp 4 - NULL
您可以看到第 4 组始终为空。 第 4 组将始终为空,因为第 3 组占用所有air 当前行的剩余部分,从不 为可选组 4 留下任何东西。
在使用量词*
或+
时仍然必须小心
捕获组。那是因为组的每次迭代,
如果匹配将有助于整个匹配,但是只有
该组将保留最后一次迭代,因为它是
每次都会覆盖内容。
【讨论】:
以上是关于正则表达式反向引用乘法[重复]的主要内容,如果未能解决你的问题,请参考以下文章