Qt 正規表示式的非貪婪模式

2021-09-30 16:15:35 字數 469 閱讀 3160

小小的 issue,簡單記錄一下。

一般來說,正則表達中使用在表達重複次數的符號後面加乙個 ? 表示匹配非貪婪模式,即匹配盡可能少的字元,比如 [\t]*? 表示匹配盡可能少的製表符。

但是,qt 不支援這種格式,預設情況下,在 qt 中 [\t]*? 表示的是 」盡可能多的製表符加上乙個任意字元「,因此,如 .*? 這樣的**就會什麼都匹配不到,因為 .* 已經把所有文字都匹配完了

今天就遇到這種問題,匹配始終為空。

實際上在 qt 的 qregexp 類中有自己的非貪婪模式方法,

void qregexp::setminimal ( bool minimal ) 

只要使用了 setminimal(true) 之後,所有的匹配都會變成非貪婪的。qt 不能支援在同乙個正規表示式既有貪婪匹配也有非貪婪匹配的情況,這也是不方便的乙個地方,但是知道了這一點之後,使用的時候注意避開寫這樣的表示式,一般來說還是沒有問題的了。

正規表示式 貪婪非貪婪模式

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。1.舉乙個例子 string str abcaxc patter p ab.c 貪婪匹配 正規表...

正規表示式貪婪與非貪婪模式

之前做程式的時候看到過正規表示式的貪婪與非貪婪模式,今天用的時候就想不起來了,現在這裡總結一下,以備自己以後用到注意。1.什麼是正規表示式的貪婪與非貪婪匹配 如 string str abcaxc patter p ab c 貪婪匹配 正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使...

正規表示式貪婪與非貪婪模式

1.什麼是正規表示式的貪婪與非貪婪匹配 如 string str abcaxc patter p ab c 貪婪匹配 正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字串str,結果就是匹配到 abcaxc ab c 非貪婪匹配 就是匹配到結果就好,就少的匹配字元。如上面...