¿Existe un equivalente de string-match para regexp?
On febrero 17, 2021 by adminMe gustaría escribir algo como esto, excepto para comparar la región con una expresión regular.
(if (string-match (buffer-substring-no-properties (point) (mark)) "foo") (bar))
¿Existe un equivalente de string-match para regexp que pueda usar así
(if (regexp-match (buffer-substring-no-properties (point) (mark)) "^[A-Z]") (bar))
para que devuelva verdadero si la región seleccionada es «Apple» y nulo si es «apple»?
Comentarios
Responder
En aras de una respuesta:
string-match
está diseñado para usarse con expresiones regulares.
(string-match REGEXP STRING & START opcional)
Devuelve el índice del inicio de la primera coincidencia para REGEXP en STRING, o nulo. La coincidencia ignora mayúsculas y minúsculas si «case-fold-search» no es nulo. Si el tercer argumento START no es nulo, comience la búsqueda en ese índice en STRING. Para el índice del primer carácter más allá de la coincidencia, haga (match-end 0). match-end y match-begin también dan índices de subcadenas que coinciden con construcciones de paréntesis en el patrón.
Puede usar la función match-string para extraer las subcadenas que coinciden con las construcciones de paréntesis en REGEXP.
Aquí hay algunos ejemplos
(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
Tenga en cuenta que si no planea usar match-data
después de usar string-match
debería prefiero usar string-match-p
que funciona igual que string-match
excepto que no «modifica match-data
cuando se ejecuta.
Como han dicho otros, en su caso looking-at
probablemente sería una mejor opción de todos modos.
(mirando REGEXP)
Devuelve t si el texto tras el punto coincide con la expresión regular REGEXP. Esta función modifica los datos de coincidencia a los que acceden los «datos de coincidencia», «final de coincidencia» y «datos de coincidencia»; guarde y restaure los datos de coincidencia si desea conservarlos.
Comentarios
- Dado que el OP tiene el orden de los argumentos incorrecto, probablemente sería una buena idea mostrar un fragmento de ejemplo llamando a
string-match
.
string-match
ya usa expresiones regulares (ii) let-bindcase-fold-search
para nil alrededor de su llamada si desea distinguir entre mayúsculas y minúsculas (iii) uselooking-at
para hacer coincidir el texto en el punto (iv) puede usarregion-beginning
yregion-end
en lugar depoint
ymark
en caso de que el último sea anterior al primero (punto extra por asegurarse de queuse-region-p
no sea nulo)C-h f
te lo diría.