Există un echivalent de string-match pentru regexp?
On februarie 17, 2021 by adminMi-ar plăcea să scriu așa ceva, cu excepția comparării regiunii cu o regexp.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Există un echivalent de șir-potrivire pentru regexp pe care să îl pot folosi așa
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
astfel încât să revină adevărat dacă regiunea selectată este „Apple” și zero dacă este „măr”?
Comentarii
Răspuns
Pentru un răspuns:
string-match
este conceput pentru a fi utilizat cu regexps.
(string-match REGEXP STRING & opțional START)
Returnează indexul de începere a primei potriviri pentru REGEXP în STRING sau zero. Potrivirea ignoră majuscule dacă „case-fold-search” nu este nulă. Dacă al treilea argument START este diferit, începeți căutarea la acel index în STRING. Pentru indexul primelor caractere dincolo de meci, faceți (sfârșitul meciului 0). „meci-sfârșit” și „meci-început” oferă, de asemenea, indicii de șiruri potrivite cu structuri de paranteză în model.
Puteți utiliza funcția „potrivire-șir” pentru a extrage șirurile potrivite de construcțiile de paranteză. în REGEXP.
Iată câteva exemple
(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
Rețineți că dacă nu intenționați să utilizați match-data
după ce utilizați string-match
prefer să utilizați string-match-p
care funcționează exact ca string-match
, cu excepția faptului că nu modifică match-data
când rulați.
După cum au spus alții, în cazul dvs. looking-at
ar fi probabil o alegere mai bună oricum.
(privind REGEXP)
Returnează t dacă textul după punct se potrivește cu expresia regulată REGEXP. Această funcție modifică datele de potrivire la care accesează „începutul meciului”, „sfârșitul meciului” și „datele de potrivire”; salvați și restaurați datele de potrivire dacă doriți să le păstrați.
Comentarii
- Având în vedere că PO a greșit ordinea argumentului, ar fi probabil o idee bună să afișăm un exemplu de fragment care apelează
string-match
.
string-match
folosește deja regexps (ii) let-bindcase-fold-search
pentru a renunța la apelul dvs. dacă doriți sensibilitate la majuscule (iii) utilizațilooking-at
pentru potrivirea textului la punctul (iv) puteți utilizaregion-beginning
șiregion-end
în loc depoint
șimark
în cazul în care acesta din urmă este înaintea primului (punct bonus pentru a vă asigura căuse-region-p
nu este nul)C-h f
ți-ar spune.