我試圖找到一個字元串是否隻包含一個單詞,
例如
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