Queremos regalarte la mejor solución que hallamos por todo internet. Deseamos que te resulte útil y si quieres aportar algo que nos pueda ayudar a mejorar hazlo con libertad.
Solución:
Cuando usas el matches()
método, está tratando de hacer coincidir toda la entrada. En su ejemplo, la entrada “Imprime esto” no coincide con el patrón porque la palabra “Impresión” no está emparejado.
Por lo tanto, debe agregar algo a la expresión regular para que coincida con la parte inicial de la stringp.ej
.*\bthis\b
Y si también desea permitir texto adicional al final de la línea:
.*\bthis\b.*
Como alternativa, utilice un Matcher
objeto y uso Matcher.find()
para encontrar coincidencias dentro de la entrada string:
Pattern p = Pattern.compile("\bthis\b");
Matcher m = p.matcher("Print this");
m.find();
System.out.println(m.group());
Producción:
this
Si desea encontrar varias coincidencias en una línea, puede llamar find()
y group()
repetidamente para extraerlos todos.
Método de ejemplo completo para el comparador:
public static String REGEX_FIND_WORD="(?i).*?\b%s\b.*?";
public static boolean containsWord(String text, String word)
String regex=String.format(REGEX_FIND_WORD, Pattern.quote(word));
return text.matches(regex);
Explique:
- (?i) – ignorar caso
- .*? – permitir (opcionalmente) cualquier carácter antes
- b – límite de palabras
- %s – variable a ser cambiada por String.format (citado para evitar errores de expresiones regulares)
- b – límite de palabras
- .*? – permitir (opcionalmente) cualquier carácter después
Para una buena explicación, consulte: http://www.regular-expressions.info/java.html
myString.matches(“regex”) devuelve true o false dependiendo si el
string puede coincidir completamente con la expresión regular. Es importante recordar que String.matches() solo devuelve true si todo string puede ser emparejado. En otras palabras: “regex” se aplica como si hubieras escrito “^regex$” con el inicio y el final de string anclas Esto es diferente de la mayoría de las otras bibliotecas de expresiones regulares, donde el método de “prueba de coincidencia rápida” devuelve true si la expresión regular se puede hacer coincidir en cualquier lugar en el
string. Si myString es abc, entonces myString.matches(“bc”) regresa false. bc coincide con abc, pero ^bc$ (que realmente se usa aquí) no.
Esto escribe “true”:
String input = "Print this";
System.out.println(input.matches(".*\bthis\b"));
Sección de Reseñas y Valoraciones
Ten en cuenta recomendar esta reseña si te valió la pena.