Es scheint, dass mehr Mainstream-Sprachen tatsächlich ihre eigene Implementierung von "Perl-like" Regexes verwenden, als tatsächlich libpcre verwenden. Zu den Sprachen, die in diese Klasse fallen, gehören (mindestens) Java, JavaScript und Python.
Java java.util.regex
Bibliothek verwendet eine Syntax, die auf Perl sehr stark basiert (ca.. Version 5.8) Regexes, einschließlich der Vorschriften für die Flucht, die \p
und \P
Unicode-Klassen, nicht gierig und "besitzergreifend" quantifiers, Rückreferenzierungen, \Q
. . \E
zitiert, und mehrere der (?...)
Konstrukte einschließlich non-Capturing-Gruppen, Lookahead/hinten Null-Breite und nicht-Backtracking-Gruppen. Tatsächlich scheinen Java-Regexes mehr mit Perl-Regexes zu gemein zu haben als libpcre. :)
Die JavaScript-Sprache verwendet auch Regexes, die von Perl abgeleitet sind; Unicode-Klassen, Lookbehind, Possessiv-Quantoren und Nicht-Backtracking-Gruppen fehlen, aber der Rest von dem, was ich für Java erwähnt habe, ist auch in JS vorhanden.
Python Regex-Syntax basiert auch auf Perl 5, mit nicht-gierigen Quantifikatoren, die meisten der (?...)
Konstrukte einschließlich non-Capturing-Gruppen, Look-Ahead/hinter und bedingten Mustern, sowie benannte Capture-Gruppen (aber mit a andere Syntax als Perl oder PCRE). Non-Backtracking-Gruppen und 'Possessiv'-Quantifizierer sind (soweit ich sehen kann) abwesend, wie auch \p
und \P
Unicode-Zeichenklassen, obwohl die Klassen \d
, und \w
auf Anfrage Unicode-fähig sind.
Vielen Dank. Ich habe meine Frage geklärt, um zu zeigen, dass ich mich für Funktionen interessiere, die Java 1.6 nicht unterstützt: –
Perl, Python, .NET, libpcre. Das sind die einzigen Implementierungen, von denen ich weiß, dass sie Capture-Gruppen unterstützen. – hobbs
Tatsächlich funktionieren viele der Python-Erweiterungen auf modernen Perls. –