Er det tilsvarende streng-match for regexp?
On februar 17, 2021 by adminJeg vil gjerne skrive noe slikt, bortsett fra å sammenligne regionen med en regexp.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Er det et ekvivalent med streng-match for regexp som jeg kan bruke slik
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
slik at det returnerer sant hvis den valgte regionen er «Apple» og ikke noe hvis det «s» apple «?
Kommentarer
- Noen tilfeldige bemerkninger: (i)
string-match
bruker allerede regexps (ii) let-bindcase-fold-search
til null rundt samtalen din hvis du vil ha saksfølsomhet (iii) bruklooking-at
for samsvarende tekst i punkt (iv) kan du brukeregion-beginning
ogregion-end
i stedet forpoint
ogmark
i tilfelle sistnevnte er før førstnevnte (bonuspoeng for å sikre atuse-region-p
er ikke-null) - @YoungFrom jeg tror element (i) kvalifiserer som et svar.
-
C-h f
vil si deg det.
Svar
Av hensyn til svaret:
string-match
er ment for å brukes med regexps.
(streng-match REGEXP STRING & valgfri START)
Returindeks for start av første kamp for REGEXP i STRING, eller null. Matching ignorerer store og små bokstaver hvis ‘case-fold-search’ ikke er null. Hvis tredje argument START ikke er null, kan du begynne å søke ved den indeksen i STRING. For indeks av første røye utover kampen, gjør (match-end 0). match-end og match-begynnelse gir også indekser for understrenger matchet med parentesekonstruksjoner i mønsteret.
Du kan bruke funksjonen match-string for å trekke ut understrengene som samsvarer med parentesekonstruksjonene i REGEXP.
Her er noen eksempler
(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
Merk at hvis du ikke har tenkt å bruke match-data
etter å ha brukt string-match
, bør du bruk helst string-match-p
som fungerer akkurat som string-match
bortsett fra at den ikke endrer match-data
når du kjører.
Som andre har sagt, ville i ditt tilfelle looking-at
sannsynligvis være et bedre valg uansett.
(ser på REGEXP)
Returner t hvis tekst etter punkt samsvarer med regulært uttrykk REGEXP. Denne funksjonen endrer samsvarsdataene som match-start, match-end og match-data tilgang; lagre og gjenopprett kampdataene hvis du vil bevare dem.
string-match
.