PCRE2 - 匹配后缀与反向引用匹配的每个单词
PCRE2 - Match every word whose suffix matches a backreference
给出下面的字符串,
ay bee ceefooh deefoo38 ee 37 ef gee38 aitch 38 eye19 jay38 kay 99 el88 em38 en 29 ou38 38 pee 12 q38 arr 999 esss 555
目标是匹配每个单词,使后缀是与 foo
之后出现的数字相匹配的数字(在本例中恰好是 38)。
只有一个子串以foo
开头,以数字结尾。预期的匹配项都存在于所述子字符串之后。
预期匹配:
gee38
jay38
em38
ou38
q38
我已经尝试了 foo(\d+).*?(\w+)\b
和 foo(\d+).*(\w+)\b
,但它们无法全部匹配,因为它们要么匹配第一个 (gee38
) 要么匹配最后一个 (q38
).
是否可以只用一个正则表达式来匹配所有内容,重要的是,只用一个 运行?
我使用的 PCRE2 引擎的行为方式与 https://regex101.com/r/uFEDOE/1 相同。所以,如果正则表达式可以匹配 regex101 上的多个子字符串,那么我使用的引擎也可以。
(?:foo|\G(?!^))(\d+).*?(?=(\w+))\w+(?=\b)
可能是一些尺寸或性能优化。
@Niko Gambt,说说是否有任何优化对你很重要。
给出下面的字符串,
ay bee ceefooh deefoo38 ee 37 ef gee38 aitch 38 eye19 jay38 kay 99 el88 em38 en 29 ou38 38 pee 12 q38 arr 999 esss 555
目标是匹配每个单词,使后缀是与 foo
之后出现的数字相匹配的数字(在本例中恰好是 38)。
只有一个子串以foo
开头,以数字结尾。预期的匹配项都存在于所述子字符串之后。
预期匹配:
gee38
jay38
em38
ou38
q38
我已经尝试了 foo(\d+).*?(\w+)\b
和 foo(\d+).*(\w+)\b
,但它们无法全部匹配,因为它们要么匹配第一个 (gee38
) 要么匹配最后一个 (q38
).
是否可以只用一个正则表达式来匹配所有内容,重要的是,只用一个 运行?
我使用的 PCRE2 引擎的行为方式与 https://regex101.com/r/uFEDOE/1 相同。所以,如果正则表达式可以匹配 regex101 上的多个子字符串,那么我使用的引擎也可以。
(?:foo|\G(?!^))(\d+).*?(?=(\w+))\w+(?=\b)
可能是一些尺寸或性能优化。
@Niko Gambt,说说是否有任何优化对你很重要。