簡體   English   中英

如何強制正則表達式匹配模式的最長部分。

[英]How do I force regex to match the longest possible part of the pattern.

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

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
                                                 ^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM