如何进行非贪婪的多重查找匹配 来源: 发动机:PCRE RegEx1:(?

如何进行非贪婪的多重查找匹配 来源: 发动机:PCRE RegEx1:(?,regex,lookbehind,non-greedy,Regex,Lookbehind,Non Greedy,把贪婪的东西放在它前面 Source: <prefix><content1><suffix1><prefix><content2><suffix2> Engine: PCRE RegEx1: (?<=<prefix>)(.*)(?=<suffix1>) RegEx2: (?<=<prefix>)(.*)(?=<suffix2>) Resu

把贪婪的东西放在它前面

Source:    <prefix><content1><suffix1><prefix><content2><suffix2>
Engine:    PCRE

RegEx1:    (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2:    (?<=<prefix>)(.*)(?=<suffix2>)

Result1:   <content1>
Result2:   <content1><suffix1><prefix><content2>

把贪婪的东西放在它前面

Source:    <prefix><content1><suffix1><prefix><content2><suffix2>
Engine:    PCRE

RegEx1:    (?<=<prefix>)(.*)(?=<suffix1>)
RegEx2:    (?<=<prefix>)(.*)(?=<suffix2>)

Result1:   <content1>
Result2:   <content1><suffix1><prefix><content2>
我建议您使用:

(?<=<prefix>)(.*?)(?=<suffix2>)
(?我建议您使用:

(?<=<prefix>)(.*?)(?=<suffix2>)

(?我也有同样的问题。但在我的情况下是这样的

(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)

(?我也有同样的问题。但在我的情况下是这样的

(?<=<prefix>)(((?!<prefix>).)*)(?=<suffix2>)

(?第一个正则表达式看起来没问题(当然你需要使用\1而不是整个匹配),第二个不起作用。它仍然会匹配太多(因为第一个可能的匹配获胜,而长匹配仍然是可能的)。是的,我不确定第二个,因此“可能”。谢谢Dav。我会尝试一下,但我希望正则表达式有一些更优雅的东西,例如类似于子模式数字的某种相对标识符。第一个正则表达式看起来不错(当然需要使用\1,而不是整个匹配),第二个不起作用。它仍然会匹配太多(因为第一场可能的比赛获胜,而长时间的比赛仍然是可能的)。是的,我不确定第二场,因此“可能”。谢谢Dav。我会尝试一下,但我希望RegEx有一些更优雅的东西,比如类似于子模式数的相对标识符。