文字列に単語が1 回だけ含まれているかどうかを調べようとしています。
例えば
String : `jjdhfoobarfoo` , Regex : `foo` --> false
String : `wewwfobarfoo` , Regex : `foo` --> true
String : `jjfffoobarfo` , Regex : `foo` --> true
複数foo
の は string のどこにでも出現する可能性があるため、連続していなくてもかまいません。
Java で string を使用して次の正規表現マッチングをテストしましたfoobarfoo
が、機能せず、trueを返します。
static boolean testRegEx(String str){
return str.matches(".*(foo)(?!.*foo).*");
}
このトピックが重複しているように見えるかもしれませんが、驚いたことに、この正規表現を使用する(foo)(?!.*foo).*
と機能します。
なぜこれが起こるのですか?