Esiste un equivalente di string-match per regexp?
Su Febbraio 17, 2021 da adminVorrei scrivere qualcosa di simile tranne che per confrontare la regione con unespressione regolare.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Esiste un equivalente di string-match per regexp che posso usare in questo modo
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
in modo che restituisca true se la regione selezionata è “Apple” e zero se è “s” mela “?
Commenti
- Alcune osservazioni casuali: (i)
string-match
utilizza già regexps (ii) let-bindcase-fold-search
per azzerare la chiamata se desideri distinzione tra maiuscole e minuscole (iii) usalooking-at
per la corrispondenza del testo al punto (iv) puoi utilizzareregion-beginning
eregion-end
invece dipoint
emark
nel caso in cui il secondo sia prima del primo (punto bonus per esserti assicurato cheuse-region-p
non sia nullo) - @YoungFrom Penso che lelemento (i) si qualifichi come una risposta.
-
C-h f
ti direbbe.
Risposta
Per amore di una risposta:
string-match
deve essere utilizzato con espressioni regolari.
(stringa-corrispondenza REGEXP STRING & optional START)
Restituisce lindice di inizio della prima corrispondenza per REGEXP in STRING o nullo. La corrispondenza ignora le maiuscole e le minuscole se “case-fold-search” è diverso da zero. Se il terzo argomento START è diverso da zero, avvia la ricerca da quellindice in STRING. Per lindice del primo carattere oltre la corrispondenza, do (match-end 0). corrispondenza-fine e corrispondenza-inizio forniscono anche indici di sottostringhe abbinate da costrutti di parentesi nel pattern.
È possibile utilizzare la funzione corrispondenza-stringa per estrarre le sottostringhe abbinate dalle costruzioni di parentesi in REGEXP.
Ecco alcuni esempi
(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
Tieni presente che se non prevedi di utilizzare match-data
dopo aver utilizzato string-match
dovresti preferisco utilizzare string-match-p
che funziona esattamente come string-match
tranne che “t modifica match-data
quando eseguito.
Come altri hanno detto, nel tuo caso looking-at
sarebbe probabilmente una scelta migliore comunque.
(guardando REGEXP)
Restituisce t se il testo dopo il punto corrisponde allespressione regolare REGEXP. Questa funzione modifica i dati di corrispondenza che accedono a “inizio corrispondenza”, “fine corrispondenza” e “dati di corrispondenza”; salva e ripristina i dati della corrispondenza se desideri conservarli.
string-match
.