Expresiones regulares para que coincida con parte de la secuencia, cuando juego no contiene una cadena específica - PCRE grep

StackOverflow https://stackoverflow.com/questions/4608492

Pregunta

Estoy usando grep TextWrangler para llevar a cabo buscar / reemplazar en varios archivos y se han topado con un muro con la última buscar / reemplazar Necesito realizar. Necesito para que coincida con cualquier texto entre "> y la primera instancia de un <br /> en una línea, pero el partido no puede contener la secuencia de caracteres [xcol]. El sabor de expresiones regulares es Perl-Compatible (PCRE) necesidades de modo de búsqueda hacia atrás para ser de longitud fija.

Ejemplo de texto a buscar:

<p class="x03">FooBar<br />Bar</p>
<p class="x03">FooBar [xcol]<br />Bar</p>
<p class="x06">Hello World<br />[xcol]foo[xcol]bar<br /></p>
<p class="x07">Hello World[xcol]<br />[xcol]foo[xcol]bar<br /></p>  

comportamiento deseado de expresiones regulares:
Primera línea partido ">FooBar<br />
Segunda línea No hay resultados
Tercera línea partido ">Hello World<br />
Cuarta línea No hay resultados

El texto entre "> y la <br /> será capturado en un grupo para ser utilizado con la función de reemplazar. Lo más cerca que llegué fue utilizando la siguiente expresión regular con la búsqueda negativa hacia delante, pero esto no coincidirá con la tercera línea de la forma deseada:

">((?!.*?\[xcol]).*?)<br />

Cualquier ayuda o consejo se agradece. Gracias.

¿Fue útil?

Solución

Probar expresión regular:

">((?!\[xcol]).)*<br\s*/>

A (corto) explicación:

">               # match '">'
(                # start group 1
  (?!\[xcol]).   #   if '[xcol]' can't be seen ahead, match any character (except line breaks)
)                # end group 1
*                # repeat group 1 zero or more times
<br\s*/>         # match '<br />'

Si usted necesita para que coincida con saltos de línea para . así, puede activar el DOT-ALL (add (?s) antes de la .) o reemplazar el . con algo como [\s\S]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top