Is er een equivalent van string-match voor regexp?
Geplaatst op februari 17, 2021 door adminIk “zou zoiets willen schrijven, behalve om de regio te vergelijken met een regexp.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Is er een equivalent van string-match voor regexp dat ik op deze manier kan gebruiken
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
zodat het true retourneert als de geselecteerde regio is “Apple” en nul als het “appel” is?
Reacties
Antwoord
Omwille van een antwoord:
string-match
is bedoeld om te worden gebruikt met regexps.
(string-match REGEXP STRING & optioneel START)
Return-index van het begin van de eerste overeenkomst voor REGEXP in STRING, of nihil. Bij matching wordt hoofdlettergebruik genegeerd als ‘case-fold-search’ niet nul is. Als de derde arg START niet-nul is, begin dan met zoeken bij die index in STRING. Voor de index van het eerste teken na de overeenkomst, do (match-end 0). match-end en match-begin geven ook indices van subtekenreeksen die overeenkomen met haakjesconstructies in het patroon.
U kunt de functie match-string gebruiken om de subtekenreeksen te extraheren die overeenkomen met de haakjesconstructies in REGEXP.
Hier zijn enkele voorbeelden
(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 op dat als u niet van plan bent match-data
te gebruiken na gebruik van string-match
gebruik liever string-match-p
wat net zo werkt als string-match
behalve dat het match-data
niet wijzigt wanneer uitgevoerd.
Zoals anderen al hebben gezegd, zou looking-at
in jouw geval waarschijnlijk toch een betere keuze zijn.
(naar REGEXP kijken)
Geef t terug als tekst na punt overeenkomt met reguliere expressie REGEXP. Deze functie wijzigt de match-data die ‘match-begin’, ‘match-end’ en ‘match-data’ toegang hebben; bewaar en herstel de wedstrijdgegevens als u ze wilt behouden.
Opmerkingen
- Gegeven dat het OP heeft de argumentvolgorde verkeerd, het zou waarschijnlijk een goed idee zijn om een voorbeeldfragment te tonen dat
string-match
aanroept.
string-match
gebruikt al regexps (ii) let-bindcase-fold-search
naar nul rond uw oproep als u hoofdlettergevoeligheid wilt (iii) gebruiklooking-at
voor overeenkomende tekst op punt (iv) kunt uregion-beginning
enregion-end
gebruiken in plaats vanpoint
enmark
in het geval dat het laatste vóór het eerste staat (bonuspunt om ervoor te zorgen datuse-region-p
niet-nul is)C-h f
zou het je vertellen.