Wie kann ich einen regulären Perl-Ausdruck interaktiv testen und verwenden?


15

Angenommen, ich habe einen Puffer mit Text. Ich möchte einen regulären Ausdruck (idealerweise Perl-Typ) anhand meines Puffers testen und Emacs die Übereinstimmungen darauf hervorheben lassen.

Zum Beispiel der folgende reguläre Ausdruck ( aus Wikipedia ):

(?<=\.) {2,}(?=[A-Z]) 

würde wie folgt auf den folgenden Text passen:

                    Bildbeschreibung hier eingeben

Dieser reguläre Ausdruck entspricht insbesondere mindestens zwei Leerzeichen nach dem Punkt (.)und vor einem Großbuchstaben.

Bietet Emacs einen interaktiven Matcher für reguläre Ausdrücke in Perl ?

Wenn die Antwort auf letzteres Nein lautet:

  1. Gibt es einen Grund, warum die native Unterstützung von regulären Perl- Ausdrücken in Emacs (jemals) nicht berücksichtigt wurde? (In Anbetracht dessen, dass es ein bekannter Standard in Unix / Linux ist)

  2. Wie kann man vorgehen, um einen solchen Perl-Regexp-Matcher zu erstellen? (Vielleicht Perl unter der Haube aufrufen oder den Perl-regulären Ausdruck in eine unterstützte Variante vorkonvertieren?)


2
Die regulären Ausdrücke von Emacs sind seit einiger Zeit älter als Perl, und ich gehe davon aus, dass sie aus Gründen der Abwärtskompatibilität nicht geändert wurden.
Shosti

1
Vielleicht möchten Sie sich auch bei github.com/joddie/pcre2el umsehen (ich habe es nicht verwendet, kann mich also nicht dafür verbürgen).
Shosti

Antworten:


15

Es gibt zwei nette Pakete für die effektive Arbeit mit Perl-Regexen, die zusammen verwendet werden sollten - Visual-Regexp und seine Erweiterung - Visual-Regexp-Steroide . Sie sind eine großartige Ergänzung zu Emacs:

Bildbeschreibung hier eingeben


2
Zur Verdeutlichung verwendet visual-regexp emacs regexp und die Steroidversion kann PCRE oder Python regex als Backend verwenden.
Kaushal Modi

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.