solo regulares regular probar letras expresiones expresion espacios espacio ejemplos direccion casa blanco alfanumerico php regex hyperlink anchor

php - probar - enlaces de correspondencias de expresiones regulares sin etiqueta<a>



expresiones regulares php (2)

(http([s]?):////?)(([a-zA-Z0-9]+(/.?))+)([a-zA-Z0-9]+((/.[a-zA-Z]{2,5}){1,2})((//[a-zA-Z0-9/?&=_/-/~:/?#[/]@!/$&''()/*/+,;]*)*)((/.[a-zA-Z]{2,5}){0,2}))

Esta es mi expresión regular, que funciona bien para hacer coincidir los enlaces de la cadena. Pero no quiero que seleccione todos los enlaces. Si un enlace tiene "> antes" o </a> después de él, ese enlace no se debe calcular. ¿Cómo se puede hacer?

Estos deben ser emparejados:

adasdas http://www.stackoverflow.com asdasas adasdasahttp://www.stackoverflow.com/something asdas

Estos NO deberían coincidir:

adasdas<a href="somelink"> http://www.stackoverflow.com </a>asdasas adasdasa<a href="somelink">http://www.stackoverflow.com/something</a> asdas

¿Por qué necesito esto ?: Quiero que se pueda hacer clic en cada enlace, incluso si no está entre las etiquetas de anclaje.


Con todas las negaciones sobre el uso de regex para analizar html, si desea usar regex para esta tarea, esto funcionará:

$regex="~<a.*?</a>(*SKIP)(*F)|http:///S+~";

Vea la demostración .

Este problema es un caso clásico de la técnica explicada en esta pregunta para "emparejar de forma regular un patrón, excluyendo ..."

El lado izquierdo de la alternancia | coincide con las <a ...tags </a> completas <a ...tags </a> luego falla deliberadamente, luego de lo cual el motor salta a la siguiente posición de la cuerda. El lado derecho coincide con las URL, y sabemos que son las correctas porque no se correspondían con la expresión de la izquierda.

La URL regex que puse a la derecha y puede ser refinada, solo use lo que se ajuste a sus necesidades.

Referencia