¿Cómo se hace una consulta-replace-regexp en Emacs que coincidirá en múltiples líneas?Emacs query-replace-regexp multiline
como un ejemplo trivial que me gustaría <p>\(.*?\)</p>
para que coincida con
<p>foo
bar
</p>
¿Cómo se hace una consulta-replace-regexp en Emacs que coincidirá en múltiples líneas?Emacs query-replace-regexp multiline
como un ejemplo trivial que me gustaría <p>\(.*?\)</p>
para que coincida con
<p>foo
bar
</p>
Prueba las clases de caracteres. Siempre que use solo juegos de caracteres ASCII, puede usar [[:ascii:]]
en lugar del punto. Usar el [[:ascii:][:nonascii:]]
más largo debería funcionar para todo.
M-x re-builder
es su amigo. Y me llevó a esta expresión regular:
"<p>\\(.\\|\n\\)*</p>"
que es la versión de cadena de
<p>\(.\|^J\)*</p> ;# where you enter ^J by C-q C-j
y que funciona para mí cuando hago re-search-forward, pero no cuando lo haga 'query-replace-regexp
. Seguros de por qué ...
Ahora, cuando se hace una 're-search-forward
(también conocido como C-u C-s
), puede escribir M-%
que le pedirá un reemplazo (a partir de Emacs 22). Entonces, puede usar eso para hacer su búsqueda y reemplazarlo con la expresión regular anterior.
nota, la expresión regular anterior coincidirá hasta que la última </p>
encontrado en la memoria intermedia, lo que probablemente no es lo que quiere, a fin de utilizar la re-constructor para construir una expresión regular que se acerca más a lo que quiere. Obviamente, las expresiones regulares no pueden contar entre paréntesis, por lo que está solo para eso, depende de qué tan sólida sea la solución que desee.
¿Hay archivos de información para el re-constructor? Tengo curiosidad sobre cómo usarlo. – seth
No es que yo pueda encontrarlo. La Wiki de Emacs tampoco tiene mucho en ella. Pero es bastante autoexplicativo (no es todo de Emacs :). Después de ingresar 're-builder', escribe' C-c C-h' y obtendrás una lista de enlaces que incluyen los que se aplican a 're-builder' y todos comienzan con' C-c'. –
Yah, llegué tan lejos. Solo estaba buscando algo un poco más profundo. ¡Gracias! – seth
Supongo que vio emacswiki: http://www.emacswiki.org/emacs/MultilineRegexp – seth
Sí, lo vi pero no pude hacerlo funcionar con query-replace-regexp. Todavía estoy intentando usar Re-Builder para probarlo ... con suerte lo resolveré pronto –
El ejemplo es muy malo, porque analizar HTML con expresiones regulares generalmente no es una buena idea. – Svante