Negative Lookaround Regex - Tylko jedno wystąpienie - Java

Próbuję znaleźć, jeśli zawiera łańcuchtylko jeden wystąpienie słowa,

na przykład

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

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

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

wielokrotnośćfoomogą się zdarzyć w dowolnym miejscu ciągu, więc mogą być niesekwencyjne,

Testuję następujące dopasowanie wyrażeń regularnych w java za pomocą łańcuchafoobarfoo, ale to nie działa i wracaprawdziwe :

static boolean testRegEx(String str){
    return str.matches(".*(foo)(?!.*foo).*");
}

Wiem, że ten temat może wydawać się duplikatem, ale jestem zaskoczony, ponieważ kiedy używam tego wyrażenia regularnego:(foo)(?!.*foo).* to działa !

Jakiś pomysł, dlaczego tak się dzieje?

questionAnswers(5)

yourAnswerToTheQuestion