2008-09-29 11 views
31

ejemplo: <a><strike>example data in here</strike></a>de REGEX: Agarrando todo hasta que una palabra específica

Quiero que todo el interior de la una etiqueta, al final

/<a>([^<]*)<\/a>/ 

Funciona cuando no hay etiquetas adicionales dentro de la etiqueta <a>, pero ¿y si hay?

Quiero saber si puede decirle que tome todo hasta [^</a>] en lugar de [^<] solamente.

Al hacerlo con /<a>(.*)<\/a>/ no funciona bien. A veces obtengo todo en la etiqueta <a> y otras veces obtengo montones de líneas incluidas en esa llamada.

Respuesta

78
/<a>(.*?)<\/a>/ 

debería funcionar. Los ? lo hace perezoso, por lo que agarra lo menos posible antes de hacer coincidir la parte </a>. pero usando significará que coincide con todo hasta que encuentre </a>. Si usted quiere ser capaz de igualar a través de líneas, puede utilizar lo siguiente si con preg_match

/<a>(.*?)<\/a>/s 

La "s" al final pone la expresión regular en el modo de "línea única", lo que significa el. el personaje coincide con todos los personajes, incluidas las nuevas líneas. Ver other useful modifiers

+0

Sí, esto es mucho mejor que mi respuesta. Esto funciona. –

+1

esto funcionará hasta que haya una dentro de un : y esto es idéntico a los famosos paréntesis emparejan problema de expresiones regulares. no hay solución a este problema con la expresión regular convencional. estarás mejor con una vieja pila simple. – wilhelmtell

+7

¿En qué versión desordenada de HTML ocurre un dentro de otra etiqueta ? – Kibbee

Cuestiones relacionadas