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.\\b
\
para especificar um único\
, então\\b
será interpretado como\b
, conforme visto no regex RAW.\b
corresponde ao limite da palavra, conforme explicado acima.matcher.find()
faz o que você precisava. Exemplo:fonte
Você pode simplesmente usar o
matches
método da classe String.fonte
.*
ou ele só corresponderá às strings que começam comstores
.Se você quiser verificar se uma string contém substring ou não usando regex, o mais próximo que você pode fazer é usar find () -
Observe a diferença entre match () e find (), match () retorna verdadeiro se toda a string corresponder ao padrão fornecido. find () tenta encontrar uma substring que corresponda ao padrão em uma dada string de entrada. Além disso, usando find (), você não precisa adicionar correspondências extras como - (? S). * No início e. * No final de seu padrão regex.
fonte
1. resultado: verdadeiro
2. resultado: verdadeiro
fonte
fromIndex
é ignorado, não é?contains("something", test, 5) => true