天天看點

java正則比對一次_負面觀察正規表達式 – 隻出現一次 – Java

我試圖找到一個字元串是否隻包含一個單詞,

例如

String : `jjdhfoobarfoo` , Regex : `foo` --> false

String : `wewwfobarfoo` , Regex : `foo` --> true

String : `jjfffoobarfo` , Regex : `foo` --> true

多個foo可能發生在字元串中的任何地方,是以它們可以是非連續的,

我在java中使用字元串foobarfoo測試以下正規表達式比對,但它不起作用并傳回true:

static boolean testRegEx(String str){

return str.matches(".*(foo)(?!.*foo).*");

}

我知道這個主題可能看似重複,但我很驚訝,因為當我使用這個正規表達式時:(foo)(?!.* foo).*它有效!

知道為什麼會這樣嗎?

解決方法:

使用兩個錨定前瞻:

static boolean testRegEx(String str){

return str.matches("^(?=.*foo)(?!.*foo.*foo.*$).*");

}

有兩個關鍵點是,有一個負面的預測來檢查2 foo的錨定開始,并且重要的是包含輸入的結束.

标簽:string-matching,java,regex

來源: https://codeday.me/bug/20190831/1778209.html