Gibt es ein Äquivalent zu String-Match für Regexp?
On Februar 17, 2021 by adminIch möchte so etwas schreiben, außer um die Region mit einem regulären Ausdruck zu vergleichen.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Gibt es ein Äquivalent zur Zeichenfolgenübereinstimmung für Regexp, das ich wie folgt verwenden kann?
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
, sodass es true zurückgibt, wenn der ausgewählte Bereich ist „Apple“ und Null, wenn es „Apfel“ ist?
Kommentare
- Einige zufällige Bemerkungen: (i)
string-match
verwendet bereits reguläre Ausdrücke (ii) let-bindcase-fold-search
, um Ihren Anruf auf Null zu setzen, wenn Sie die Groß- und Kleinschreibung beachten möchten (iii) verwenden Sielooking-at
Zum Abgleichen von Text an Punkt (iv) können Sieregion-beginning
undregion-end
anstelle vonpoint
undmark
für den Fall, dass Letzteres vor Ersterem liegt (Bonuspunkt, um sicherzustellen, dassuse-region-p
nicht Null ist) - @YoungFrom Ich denke, Punkt (i) gilt als Antwort.
-
C-h f
würde es Ihnen sagen.
Antwort
Um eine Antwort zu erhalten:
string-match
ist für die Verwendung mit regulären Ausdrücken vorgesehen.
(Zeichenfolgenübereinstimmung) REGEXP STRING & optional START)
Gibt den Index des Starts der ersten Übereinstimmung für REGEXP in STRING oder nil zurück. Beim Abgleichen wird die Groß- und Kleinschreibung ignoriert, wenn „case-fold-search“ nicht null ist. Wenn das dritte Argument START nicht Null ist, starten Sie die Suche an diesem Index in STRING. Für den Index des ersten Zeichens nach dem Match tun Sie (Match-Ende 0). match-end und match-begin geben auch Indizes von Teilzeichenfolgen an, die mit Klammerkonstrukten im Muster übereinstimmen.
Mit der Funktion match-string können Sie die Teilzeichenfolgen extrahieren, die mit den Klammerkonstruktionen übereinstimmen in REGEXP.
Hier einige Beispiele
(string-match "\\(dog\\|cat\\)" "There is a dog.") ;; => 11 (string-match "\\(dog\\|cat\\)" "There are two cats here." 0) ;; => 14 (string-match "\\(dog\\|cat\\)" "There are two cats here." 15) ;; => nil (string-match "\\(dog\\|cat\\)" "There are horses.") ;; => nil
Beachten Sie, dass Sie match-data
nach Verwendung von string-match
nicht verwenden sollten Verwenden Sie lieber string-match-p
, was genau wie string-match
funktioniert, außer dass match-data
nicht geändert wird Wenn ausgeführt.
Wie andere bereits gesagt haben, wäre looking-at
wahrscheinlich sowieso die bessere Wahl.
(mit Blick auf REGEXP)
Gibt t zurück, wenn der Text nach dem Punkt mit dem regulären Ausdruck REGEXP übereinstimmt. Diese Funktion ändert die Match-Daten, auf die „Match-Beginn“, „Match-Ende“ und „Match-Daten“ zugreifen. Speichern und Wiederherstellen der Übereinstimmungsdaten, wenn Sie diese beibehalten möchten.
Kommentare
- Das OP hat die Argumentreihenfolge falsch verstanden. Es wäre wahrscheinlich eine gute Idee, ein Beispiel-Snippet zu zeigen, das
string-match
aufruft.
Schreibe einen Kommentar