假设您逐行匹配文本。在某些情况下,该行可能包含可变大小的额外符号。问题是这些额外符号的狭窄模式是未知的,因此迫使使用宽捕获模式。这些模式反过来会影响文本。
示例(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 text
和some 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
)。