regex 如何强制正则表达式匹配模式中可能最长的部分,

nukf8bse  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

我在.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=“最长”

j8ag8udp

j8ag8udp1#

默认情况下,RegEx是“贪婪”的,这意味着它将尽可能地匹配 *。要使重复延迟,请添加?

I <?a:[\w\W]*?>(want to match <?b:longest>)? available
             ^

这将延迟匹配0+ [\w\W]个字符,换句话说:直到表达式可以继续匹配(一旦它看到want to match longest available等)。

示例:greedylazy(单击“regex调试器”以查看这些重复操作的操作方式)。

同样的想法也适用于你的另一个表情,然而贪婪是一个不同位置的问题:

I ((?<a>[\w\W]*)|(want to match (?<b>longest))?)+? available
                                                 ^

相关问题