Según entiendo, la implementación de Java de expresiones regulares se basa en Perl. Sin embargo, en el siguiente ejemplo, si ejecuto la misma expresión regular con la misma cadena, Java y Perl devuelven resultados diferentes.¿Por qué las expresiones regulares en Java y Perl actúan de manera diferente?
Aquí está el ejemplo de Java:
public class RegexTest {
public static void main(String args[]) {
String sentence = "This is a test of regular expressions.";
System.out.println(sentence.matches("\\w") ? "Matches" : "Doesn't match");
}
}
Esto devuelve: no coincide con
Aquí está el ejemplo de Perl:
my $sentence = 'This is a test of regular expressions.';
print ($sentence =~ /\w/ ? "Matches" : "Doesn't match") . "\n";
Esto devuelve: Partidos
Para mí, el resultado de Perl tiene sentido. Busca una coincidencia para un personaje de una sola palabra. No entiendo por qué Java no lo considera un partido. ¿Cuál es el motivo de la diferencia?
PCRE era compatible con perl en los primeros días de Perl versión 5, o era perl v4. No es seguro. Mientras tanto, la expresión regular de Perl avanzó mucho. –
+1 para responder la pregunta más general (la del título). Me gustaría agregar que el libro 'Mastering Regular Expressions' de Jeffrey Friedl es excelente para entender las similitudes y diferencias entre los sabores regex comunes. – Jonik