String.contains
String.contains
trabalha com String, ponto final. Não funciona com regex. Ele verificará se a String exata especificada aparece na String atual ou não.
Observe que String.contains
não verifica o limite da palavra; ele simplesmente verifica a substring.
Solução Regex
Regex é mais poderoso do que String.contains
, uma vez que você pode impor limites de palavras nas palavras-chave (entre outras coisas). Isso significa que você pode pesquisar as palavras-chave como palavras , em vez de apenas substrings .
Use String.matches
com o seguinte regex:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
O regex RAW (remova o escape feito no literal de string - isso é o que você obtém quando imprime a string acima):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
A \b
verificação de limite de palavra, para que você não obtenha uma correspondência para restores store products
. Observe que stores 3store_product
também é rejeitado, uma vez que dígito e_
são considerados parte de uma palavra, mas eu duvido que esse caso apareça em texto natural.
Como o limite da palavra é verificado para ambos os lados, o regex acima irá pesquisar por palavras exatas. Em outras palavras, stores stores product
não corresponderá ao regex acima, pois você está procurando pela palavra store
sem s
.
.
normalmente corresponde a qualquer caractere, exceto um número de caracteres de nova linha . (?s)
no início faz .
combinações com qualquer caractere sem exceção (obrigado a Tim Pietzcker por apontar isso).
(?s)
ao início de sua regex, caso a string contenha novas linhas.