encontré esta pregunta sobre cómo portar PHP "s preg_match
a Java (recomienda usar String.matches()
. Sin embargo, todavía tengo problemas con la siguiente situación:
PHP:
preg_match("/<(h1|h2|h3|h4|ul|td|div|table)/i", "<h1>")
=> devuelve 1
Java:
"<h1>".matches("/<(h1|h2|h3|h4|ul|td|div|table)/i")
=> volver false
¿Por qué sería eso?
Respuestas
1 para la respuesta № 1En java matches()
requiere una coincidencia de cadena completa. Y no necesitas delimitadores de expresiones regulares.
"<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>")
Ver Demo IDEONE
Si planea usar la misma expresión regular en Java, use Matcher
con find()
(find
coincidirá en cualquier lugar en la cadena de entrada y Pattern.CASE_INSENSITIVE
actuará como i
opción en PHP):
String str = "<h1>";
String rx = "<(h1|h2|h3|h4|ul|td|div|table)";
Pattern ptrn = Pattern.compile(rx, Pattern.CASE_INSENSITIVE);
Matcher m = ptrn.matcher(str);
while (m.find()) {
System.out.println(m.group(0));
}
Ver otra demo
1 para la respuesta № 2
Es necesario eliminar los delimitadores de expresiones regulares.
Y también hay que añadir
(?i)
Modificador para hacer coincidencias insensibles a mayúsculas.Finalmente tienes tyo add
>
en el último desdematches
El método intenta hacer coincidir toda la cadena."<h1>".matches("(?i)<(h1|h2|h3|h4|ul|td|div|table)>");
0 para la respuesta № 3
En Java debería ser:
"<h1>".matches("(?i)<(h[1234]|ul|td|div|table)>");
es decir, sin delimitador de expresiones regulares y (?i)
para la comparación de casos ignorados.