String.contains
String.contains
funciona con String, punto. No funciona con expresiones regulares. Verificará si la Cadena exacta especificada aparece en la Cadena actual o no.
Tenga en cuenta que String.contains
no comprueba el límite de palabras; simplemente busca una subcadena.
Solución Regex
Regex es más poderoso que String.contains
, ya que puede hacer cumplir el límite de palabras en las palabras clave (entre otras cosas). Esto significa que puede buscar las palabras clave como palabras , en lugar de solo como subcadenas .
Úselo String.matches
con la siguiente expresión regular:
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
La expresión regular RAW (elimine el escape realizado en el literal de cadena; esto es lo que obtiene cuando imprime la cadena de arriba):
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
Los \b
cheques de límite de palabra, por lo que no se obtiene una coincidencia para restores store products
. Tenga en cuenta que stores 3store_product
también se rechaza, ya que dígito y_
se consideran parte de una palabra, pero dudo que este caso aparezca en texto natural.
Dado que el límite de palabras está marcado para ambos lados, la expresión regular de arriba buscará palabras exactas. En otras palabras, stores stores product
no coincidirá con la expresión regular anterior, ya que está buscando la palabra store
sin s
.
.
normalmente coincide con cualquier carácter excepto con un número de caracteres de nueva línea . (?s)
al principio hace .
coincidir con cualquier personaje sin excepción (gracias a Tim Pietzcker por señalar esto).
(?s)
al inicio de su expresión regular en caso de que la cadena contenga nuevas líneas.