捕获重复的单词序列

时间:2014-03-22 20:41:36

标签: regex perl

在Perl中,要匹配a11a之类的文字模式,g22gx33x以下正则表达式可以正常工作

  ([a-z])(\d)\g2\g1

现在我想匹配类似于上面的重复组,但在

之类的单词之间有空格

abcd 101 abcd 101在一个单行正文模式中捕获整个字符串的单行文本或段落

如何做到这一点......我尝试了下面的模式,但它不会工作

    ([a-zA-Z]*\s)([0-9]*\s)\g1\g2 
#logic is : words followed by space in 1 group and 
#numbers followed by space in 2nd group

Regex101 Demo

另外,请解释为什么上述正则表达式无法捕获所需的文本模式!!!

修改

又一个并发症:

假设模式类似于

[words][space][numbers][space][words][space][numbers]
#assume all [numbers] and [word] are same

....所以在上一个[numbers]案例中,[space]没有关注,如何过滤然后...因为正则表达式组捕获如下:

如果重复,

([0-9]*\s)肯定无法捕获最后一部分,

如果重复,那么

([0-9]*)将无法捕获中间部分!! ?? Regex 101

2 个答案:

答案 0 :(得分:3)

你的问题是你的正则表达式最终需要一个空格,因为你已经将空间包含在捕获中。

尝试改为:

([a-zA-Z]+)\s([0-9]+)\s\g1\s\g2

答案 1 :(得分:1)

([0-9]*\s) = 101空格

所以\g2101不匹配,因为它最后没有任何空格。

更新:为输入([a-zA-Z]*\s)([0-9]*)\s\g1\g2工作正则表达式abcd 101 abcd 101

Online Demo

更多示例:

([a-zA-Z]*\s)     ([0-9]*)       \s         \g1          \g2
   abcd+space        101        Space       abcd+space    101