Czy istnieje odpowiednik dopasowania ciągów dla wyrażenia regularnego?
On 17 lutego, 2021 by adminChciałbym napisać coś takiego, z wyjątkiem porównania regionu z wyrażeniem regularnym.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Czy istnieje odpowiednik dopasowania ciągów dla wyrażenia regularnego, którego mogę użyć w ten sposób?
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
, aby zwracało wartość true, jeśli wybrany region jest „Apple” i zero, jeśli jest to „jabłko”?
Komentarze
Odpowiedź
Aby uzyskać odpowiedź:
string-match
jest przeznaczone do użytku z wyrażeniami regularnymi.
(string-match REGEXP STRING & opcjonalny START)
Zwraca indeks początku pierwszego dopasowania REGEXP w STRING lub nil. Dopasowanie ignoruje wielkość liter, jeśli „wyszukiwanie po składaniu wielkości liter” jest różne od zera. Jeśli trzeci argument START jest różny od zera, rozpocznij wyszukiwanie od tego indeksu w STRING. Dla indeksu pierwszego znaku poza dopasowaniem wykonaj do (koniec dopasowania 0). „match-end” i „match-start” również dają indeksy podciągów dopasowanych przez konstrukcje nawiasów we wzorcu.
Funkcji „match-string” można użyć do wyodrębnienia podciągów dopasowanych przez konstrukcje nawiasów w REGEXP.
Oto kilka przykładów
(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
Pamiętaj, że jeśli nie planujesz używać match-data
po użyciu string-match
, powinieneś wolę używać string-match-p
, które działa tak samo jak string-match
, z wyjątkiem tego, że nie „t modyfikuje match-data
po uruchomieniu.
Jak powiedzieli inni, w twoim przypadku looking-at
i tak byłoby prawdopodobnie lepszym wyborem.
(patrząc na REGEXP)
Zwróć t, jeśli tekst po punkcie pasuje do wyrażenia regularnego REGEXP. Ta funkcja modyfikuje dane dopasowania, które mają dostęp do „początku dopasowania”, „końca dopasowania” i „danych dopasowania”; zapisz i przywróć dane dopasowania, jeśli chcesz je zachować.
Komentarze
- Biorąc pod uwagę, że OP ma nieprawidłową kolejność argumentów, prawdopodobnie dobrym pomysłem byłoby pokazanie przykładowego fragmentu wywołującego
string-match
.
string-match
już używa wyrażeń regularnych (ii) let-bindcase-fold-search
do zera wokół połączenia, jeśli chcesz rozróżniać wielkość liter (iii) użyjlooking-at
do dopasowania tekstu w punkcie (iv) możesz użyćregion-beginning
iregion-end
zamiastpoint
imark
w przypadku, gdy to drugie jest przed pierwszym (punkt bonusowy za upewnienie się, żeuse-region-p
jest różny od zera)C-h f
powie Ci.