我在 .net 中有一个模式,我希望一个字符串与该模式的最长部分匹配
Pattern : "I (?<a>[\w\W]*)(want to match (?<b>longest))? available"
or "I ((?<a>[\w\W]*)|(want to match (?<b>longest))?)+ available"
字符串:“我想匹配最长可用”
比赛后我们有:a="想要匹配最长的",b=""
但我想要:a="",b="最长"
Pattern : "I (?<a>[\w\W]*)(want to match (?<b>longest))? available"
or "I ((?<a>[\w\W]*)|(want to match (?<b>longest))?)+ available"
字符串:“我想匹配最长可用”
比赛后我们有:a="想要匹配最长的",b=""
但我想要:a="",b="最长"
RegEx 默认情况下是“贪婪的”,这意味着它会尽可能匹配。要使重复变得懒惰,请添加?
.
I <?a:[\w\W]*?>(want to match <?b:longest>)? available
^
现在这将延迟匹配 0+[\w\W]
个字符,或者换句话说:直到表达式可以继续匹配(一旦它看到want to match longest available
等)。
示例: 贪婪与懒惰(单击“正则表达式调试器”以查看每个重复操作的方式)。
同样的想法也适用于您的其他表达,但是贪婪是不同位置的问题:
I ((?<a>[\w\W]*)|(want to match (?<b>longest))?)+? available
^