2 捕获由不需要的字符分隔的第二个倍数捕获的组
2 Capturing groups with a multiples catch on the second that is separated by unwanted char
我正在尝试多次捕获跟随另一个或他自己的捕获组。我可以一遍又一遍地多次使用相同的字符串。我们就拿下面的来做测试吧:
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 list。有一个棘手的部分:它可能有多个 spaces 和新行。但它可能只有一个 space。所以我可以不依赖于换行部分。
鉴于这个新想法,我想到了这个:
(\w*_abcd)\s*((?: ?abcd_\w*;?)+)
哪个工作正常,但我想知道。是否有可能实现我的第一个想法:用每个不同的 abcd_X 捕获相同的 randomX_abcd ?
不,不可能,因为正则表达式索引在匹配成功后会向右推进。您不能在字符串中的同一索引处多次匹配。
我正在尝试多次捕获跟随另一个或他自己的捕获组。我可以一遍又一遍地多次使用相同的字符串。我们就拿下面的来做测试吧:
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 list。有一个棘手的部分:它可能有多个 spaces 和新行。但它可能只有一个 space。所以我可以不依赖于换行部分。 鉴于这个新想法,我想到了这个:
(\w*_abcd)\s*((?: ?abcd_\w*;?)+)
哪个工作正常,但我想知道。是否有可能实现我的第一个想法:用每个不同的 abcd_X 捕获相同的 randomX_abcd ?
不,不可能,因为正则表达式索引在匹配成功后会向右推进。您不能在字符串中的同一索引处多次匹配。