Skip to content
Tiantan
Articles

Existe um equivalente de string-match para regexp?

On Fevereiro 17, 2021 by admin

Gostaria 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-bind case-fold-search para nulo em sua chamada se você quiser diferenciação de maiúsculas e minúsculas (iii) use looking-at para correspondência de texto no ponto (iv), você pode usar region-beginning e region-end em vez de point e mark caso o último seja anterior ao anterior (ponto de bônus para garantir que use-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.

Comentários

  • Dado que o OP obteve a ordem do argumento errada, provavelmente seria uma boa ideia mostrar um trecho de exemplo chamando string-match.

Written by admin

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Artigos recentes

  • Usando um balun com um dipolo ressonante
  • Qual é a diferença entre “ cant ” e “ cant ”? [duplicar]
  • No JFK, você pode se mover entre os terminais do lado ar em voos domésticos?
  • “ Muito apreciada ” ou “ muito apreciada ”
  • O que ' ideias abstratas ' significa? [fechado]

Arquivo

  • Fevereiro 2021
  • Janeiro 2021
  • Dezembro 2020
  • Novembro 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top