.net - 如何强制正则表达式匹配模式的最长可能部分。

标签 .net regex named-captures

我在 .net 中有一个模式,我希望一个字符串与该模式的最长可能部分相匹配

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

字符串:“我想匹配最长的可用”

after match we have : a="want to match longest" , b=""
but i want : a="" , b="longest"

最佳答案

RegEx 默认情况下是“贪婪的”,这意味着它将尽可能匹配。制作repetition lazy ,添加?

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

现在将延迟匹配 0+ [\w\W] 个字符,或者换句话说:直到表达式可以继续匹配(一旦它看到想要匹配最长的可用 等)。

示例: greedylazy (单击“正则表达式调试器”以查看每个重复的操作方式)。

同样的想法也适用于您的其他表达,但是贪婪是不同位置的问题:

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

关于.net - 如何强制正则表达式匹配模式的最长可能部分。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789380/

相关文章:

Python 正则表达式命名捕获组

c# - 对完全依赖于第三方应用程序的服务进行单元测试

.net - 由于编码问题,WebClient.DownloadString 导致字符损坏,但浏览器正常

c# - 在正则表达式中排除匹配

ruby - 如何在 ruby​​ 中像 Rubular 一样获取匹配组而不拆分字符串

ruby - regexp\k<name+0> 中的 "+0"是什么意思?

c# - 从架构的角度来看,Session[] 或 Encrypted Cookies 的最佳方法是什么?

c# - BackgroundWorker:从 DoWorkEventHandler 调用的每个方法是否都在后台线程中运行?

java - 删除连续出现的某些字母

php - 非贪婪正则表达式