【问题标题】:2 Capturing groups with a multiples catch on the second that is separated by unwanted char2 捕获具有倍数的组捕获第二个被不需要的字符分隔的组
【发布时间】:2016-12-06 08:44:45
【问题描述】:

我试图多次捕获跟随另一个或他自己的捕获组。我可以一遍又一遍地多次使用相同的字符串。我们就拿下面的一个来做测试吧:

 thing: random1_abcd
                abcd_n1p3; abcd_n2p1


"random2_abcd" does not exist.
 thing:  random3_abcd
                abcd_n1p1; abcd_n2p3

 thing: random4_abcd
                abcd_n1p3; abcd_n3p1; abcd_n2p7

 thing:  random5_abcd
                abcd_n4p2; abcd_n3p3; abcd_n6p7; abcd_n1p6

我想捕捉 abcd_X foreach randomX_abcd(并知道它们之间的界限)。我不能抓住 "random2_abcd",因为它不存在!

这是我到目前为止所做的:(\w*_abcd) 是为了捕获 randomX_abcd。我得到了(abcd_\w*) 来捕获 abcd_X 部分。起初我试图抓住每一个 abcd_X 分开。所以我使用了(\w*_abcd)\s*(?: (abcd_\w*);?)+,但它只捕获最后一个 abcd_X 因为它很贪婪。第二组不会出现倍数。 Example

现在我试图只获得 2 个组(不再有多个匹配与相同的捕获组:一个与 randomX_abcd 和另一个与相应的 abcd_X 列表。那里是一个棘手的部分:它可能有多个空格和换行符。但它可能只有一个空格。所以我不能依赖换行符部分。 鉴于我提出了这个新想法:

(\w*_abcd)\s*((?: ?abcd_\w*;?)+)

哪个工作正常,但我想知道。是否有可能实现我的第一个想法:用每个不同的 abcd_X 捕获相同的 randomX_abcd

【问题讨论】:

  • 不,这是不可能的。因为成功匹配后,正则表达式索引向右推进。您不能在字符串中的同一索引处多次匹配。是你期待的答案吗?
  • 好的,我明白了,谢谢。
  • 请注意,这可以通过 Perl6 正则表达式实现,即使从同一位置开始,也可以获得任何类型的重叠匹配。

标签: regex ksh


【解决方案1】:

不,这是不可能的,因为匹配成功后正则表达式索引会向右移动。您不能在字符串中的同一索引处多次匹配。

【讨论】:

    猜你喜欢
    • 2016-01-04
    • 2011-05-16
    • 1970-01-01
    • 2021-08-22
    • 2015-02-03
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多