用于懒惰组捕获的正则表达式技术(具体案例)

时间:2017-02-01 14:04:28

标签: regex lazy-evaluation pcre

假设您逐行匹配文本。在某些情况下,该行可能包含可变大小的额外符号。问题是这些额外符号的狭窄模式是未知的,因此迫使使用宽捕获模式。这些模式反过来会影响文本。

示例(PCRE风格,标志: g,x,m ):

(?<a1>[0-9]{4})
(?:[ ](?<a2>\([A-Z]\)))?
(?:[ ](?<extra>[A-Za-z]+(?:[ ]+[A-Za-z]+)+))?
(?<a3>[ ](?:foo[ ][0-9])|(?:bar[ ][a-z]{2,5}[0-9]))?
(?<a4>[ 0-9]+)

匹配的文字(在这种情况下为some textsome foo text是额外的符号):

1000 (A) some text foo 5 10 10 10
1001 some foo text foo 5 10 10 10
1002 foo 5 10 10 10
1003 bar w225 10 10 10

毫不奇怪,这不会产生预期的结果。是否有正确的技术来正确地做到这一点?

此处的完整示例:https://regex101.com/r/bVX9zH/1

修改:所需的行为是,群组a3尽可能与文本匹配,extra尽可能与匹配。在示例中,每一行都没有a3匹配(即第一行a3应包含foo 5)。

0 个答案:

没有答案