La mia comprensione è che l'implementazione di Java di espressioni regolari è basata su Perl. Tuttavia, nell'esempio seguente, se eseguo la stessa regex con la stessa stringa, Java e Perl restituiscono risultati diversi.Perché le espressioni regolari in Java e Perl si comportano diversamente?
Ecco l'esempio 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");
}
}
Ciò restituisce: Non corrisponde
Ecco l'esempio Perl:
my $sentence = 'This is a test of regular expressions.';
print ($sentence =~ /\w/ ? "Matches" : "Doesn't match") . "\n";
Ciò restituisce: Partite
Per me, il risultato Perl ha senso. Cerca una corrispondenza per un carattere a parola singola. Non capisco perché Java non lo consideri una corrispondenza. Qual è la ragione della differenza?
PCRE era compatibile con perl nei primi giorni di perl versione 5, oppure era perl v4. Non sono sicuro. Nel frattempo la regex di perl ha fatto progressi molto. –
+1 per rispondere alla domanda più generale (quella del titolo). Mi piacerebbe aggiungere che il libro "Mastering Regular Expressions" di Jeffrey Friedl è ottimo per comprendere le somiglianze e le differenze tra gli aromi regex comuni. – Jonik