str_replace remove regulares preg_match_all preg_match online expresiones especiales caracteres php regex

php - remove - expresiones regulares: coincide con todos los anclajes con atributos opcionales



str_replace (1)

esto debería coincidir bien:

/<a/s+([^>]*)href="https?:////([^"]*)"(.*?)>(.*?)<//a>/

Lo útil aquí es el partido perezoso. *? significa que coincidirá solo tanto como sea necesario, a diferencia del partido regular, que es codicioso.

Para demostrar, con este texto:

abcdabcd

estas expresiones tendrán resultados diferentes:

/a.*c/ selects: "a b c d a b c" /a.*?c/ selects: "a b c"

Tengo un editor wysiwyg en mi back-end, y está tropezando con la primera expresión regular que escribí. Esto está en PHP4, usando preg_replace() . Estoy capturando el URI y el texto vinculado.

@<a/shref=/"http[s]?://([^/"]*)/"[]>(.*)<//a>@siU

El cliente quería que todos los enlaces externos se abrieran en una nueva ventana, así que esa es la expresión que estaba usando para encontrar todos (con suerte) enlaces externos, pero dejar vínculos de anclaje de página internos, etc.

Me di cuenta de que el editor wysiwyg también agrega style="font-weight: bold" si el usuario selecciona negrita en el enlace. Recientemente comencé a aprender expresiones regulares, así que no estoy seguro de cómo resolver este problema.

¿Cómo lo haría?