Existuje ekvivalent shody řetězců pro regexp?
On 17 února, 2021 by adminChtěl bych něco takového napsat, kromě srovnání regionu s regexp.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Existuje ekvivalent shody řetězců pro regexp, který mohu takto použít
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
tak, aby vracel true, pokud je vybraná oblast „Apple“ a nulové, pokud je to „jablko“?
Komentáře
Odpověď
Kvůli odpovědi:
string-match
je určen pro použití s regexps.
(shoda řetězce REGEXP STRING & volitelný START)
Vrátí index začátku první shody pro REGEXP v STRING nebo nulový. Odpovídající ignoruje velká a malá písmena, pokud je „case-fold-search“ nenulové. Pokud je třetí argument START nenulový, začněte hledat v tomto indexu v řetězci STRING. U indexu prvního znaku nad rámec shody proveďte (konec zápasu 0). match-end a match-beginning také dávají indexy dílčích řetězců shodných s konstrukcemi závorek ve vzoru.
Pomocí funkce match-string můžete extrahovat dílčí řetězce shodné s konstrukcemi závorek v REGEXP.
Zde je několik příkladů
(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
Všimněte si, že pokud po použití string-match
nemáte v plánu použít match-data
raději použít string-match-p
, který funguje stejně jako string-match
kromě toho, že nezmění match-data
při spuštění.
Jak již bylo řečeno, ve vašem případě by looking-at
byla pravděpodobně i tak lepší volba.
(při pohledu na REGEXP)
Vrátí t, pokud text za bodem odpovídá regulárnímu výrazu REGEXP. Tato funkce upravuje údaje o shodě, ke kterým mají přístup „začátek zápasu“, „konec zápasu“ a „data shody“; uložte a obnovte údaje o shodě, pokud je chcete uchovat.
Komentáře
- Vzhledem k tomu OP má nesprávné pořadí argumentů, pravděpodobně by bylo dobré ukázat ukázkový úryvek volající
string-match
.
string-match
již používá regexps (ii) let-bindcase-fold-search
k nulovému ukončení hovoru, pokud chcete rozlišovat velká a malá písmena (iii) použijtelooking-at
pro shodu textu v bodě (iv) můžete místopoint
region-end
/ div> amark
v případě, že je předcházející předcházející (bonusový bod za to, žeuse-region-p
je nenulový)C-h f
vám to řekne.