我正在研究C regex。
输入文本:

headera
aa1aaa
aa2aaa
aa3aaa

headerb
aa4aaa
aa5aaa
aa6aaa

headerc
aa7aaa
aa8aaa
aa9aaa

我只想捕捉介于headerb和headerc之间的数字4、5和6
我的尝试:
我能用下面的图案捕捉到黑德拉和黑德博下面的那些。我不能在lookbehind中应用相同的概念,因为这应该是零宽度,因此不允许使用量词。
aa(\d+)aaa(?=[\s|\S]*headerc)

重复捕获组将只捕获最后一次迭代。我不能为多个实例应用通配符regex。
请协助。
谢谢
[已解决]
利用.NET能够支持可变宽度查找的优点。
您可以使用以下模式:
@"(?<=headerb[\s|\S]*)aa(\d)aaa(?=[\s\S]*headerc)"
@"(?s)(?<=\bheaderb\b.*?)\d+(?=.*?\bheaderc\b)"
@"(?<=\bheaderb\b(?:(?!\bheaderc\b)[\s\S])*)aa(\d+)aaa"

最佳答案

C支持变量lookbehind,所以使用它。

(?<=\bheaderb\b(?:(?!\bheaderc\b)[\s\S])*)aa(\d+)aaa

See Demo.

09-11 01:32