Existe um equivalente de string-match para regexp?
On Fevereiro 17, 2021 by adminGostaria de escrever algo assim, exceto para comparar a região com uma regexp.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
Existe um equivalente de string-match para regexp que eu possa usar assim
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
para que retorne verdadeiro se a região selecionada for “Apple” e nulo se for “s” apple “?
Comentários
- Algumas observações aleatórias: (i)
string-match
já usa regexps (ii) let-bindcase-fold-search
para nulo em sua chamada se você quiser diferenciação de maiúsculas e minúsculas (iii) uselooking-at
para correspondência de texto no ponto (iv), você pode usarregion-beginning
eregion-end
em vez depoint
emark
caso o último seja anterior ao anterior (ponto de bônus para garantir queuse-region-p
seja não nulo) - @YoungFrom Acho que o item (i) se qualifica como uma resposta.
-
C-h f
diria a você.
Resposta
Para uma resposta:
string-match
deve ser usado com regexps.
(string-match REGEXP STRING & START opcional)
Índice de retorno do início da primeira correspondência para REGEXP em STRING ou nulo. A correspondência ignora maiúsculas e minúsculas se “pesquisa de dobra de caixa” não for nulo Se o terceiro arg START não for nulo, inicie a pesquisa nesse índice em STRING. Para o índice do primeiro caractere além da correspondência, faça (match-end 0). match-end e match-start também fornecem índices de substrings correspondidos por construções de parênteses no padrão.
Você pode usar a função match-string para extrair os substrings correspondidos pelas construções de parênteses. no REGEXP.
Aqui estão alguns exemplos
(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
Observe que se você não planeja usar match-data
depois de usar string-match
, você deve prefira usar string-match-p
que funciona exatamente como string-match
, exceto que não modifica match-data
quando executado.
Como já foi dito, no seu caso, looking-at
provavelmente seria uma escolha melhor de qualquer maneira.
(olhando para REGEXP)
Retorne t se o texto após o ponto corresponder à expressão regular REGEXP. Esta função modifica os dados de correspondência que acessam “início de correspondência”, “fim de correspondência” e “dados de correspondência”; salve e restaure os dados de correspondência se quiser preservá-los.
string-match
.