匹配優先存在的問題,以及解決辦法

2021-09-07 21:39:13 字數 907 閱讀 4687

1、匹配優先存在的問題,考慮下面的情況: the name "dumpling" is said "jiaozi" in chenese.  我們想要匹配 雙引號引起來的單詞,這裡也就是 dumpling和jiaozi。

使用 ".*" ,出現什麼問題? "匹配第乙個雙引號,.* 量詞優先匹配,一直吃下去,遲到最後的e,導致後面匹配失敗(也就是全域性匹配失敗),因此要吐出來,一次吐出乙個,嘗試一下,失敗了再吐出乙個,直到jiaozi"後面的"匹配成功,return。 這當然不是我們預期的結果,怎麼辦?

2、這裡錯誤的原因是,".*" 匹配了雙引號的中的任意文字,這不是我們的意圖,應該是匹配除了"之外的任意文字。那麼我們使用 排除型字元組。如下:"[^"]*" ,注意排除型字元組的含義是:匹配乙個字元,這個字元是除了"以外的任意字元。

3、現在考慮下面的場景:andybill,要匹配中的人名,我們使用[^]*,這存在問題:[^]不是表示除了 ""以外的字元,而是匹配乙個字元,這個字元是除了 < / b >以外的字元,也就是說等價於 [^<>b/],[^]*就是匹配任意多個字元,字元中不包含 < / b >。這不是我們的意圖,怎麼解決這個問題?

4、這裡錯誤的原因是:量詞匹配優先,也就是會多吃。我們知道正規表示式匹配過程中,會有回溯。對於量詞,無論是匹配優先還是忽略優先,都要為全域性匹配服務。當全域性匹配失敗的時候,都要回溯。對於匹配優先,多吃的要吐出來,對於忽略優先,少吃的再吃下去。解決辦法是量詞忽略優先,盡量少吃。如下:.*?

5、還有沒有其他的解決辦法?

使用環視功能,如下:((?!).)*,(?!)是順序環視,從左往右,匹配乙個位置,這個位置的右邊不是或者。這個位置後面緊接著乙個任意字元(注意:這個任意字元,已經是限制後的任意字元,前面的約束已經限定了 多個. 不能組成或者)。

遇見的問題以及解決辦法

c 問題 其他問題 wpf設定圓角窗體設定圓角窗體 動態建立控制項修改margin屬性 btn.margin new thickness 10,20,30,40 btn.margin new thickness 10 動態建立控制項放置grid中button bt new button bt.set...

前端遇到的問題以及解決辦法

在node.js安裝目錄下新建兩個資料夾 node global和node cache,複製名字,名字不能錯。cmd輸入命令 npm config set prefix d program files nodejs node global npm config set cache d program...

js閉包問題以及解決辦法

個人理解閉包的產生主要就是 一切最外部的函式比裡面的函式先執行,必然產生閉包,閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏 解析 實現上現在的demo儲存的是function b a執行之後就銷魂了自身的ao,但是此時b已經儲存了a的ao 解析 為什麼可以列印出123?因為函式內部的b函式並沒有執...