Tengo unos cientos de archivos html que quiero mostrar en un sitio web. Todos ellos tienen enlaces en ellos en el siguiente formato:
[My Test URL|https://www.mywebsite.com/test?param=123]El problema es que algunas URL están divididas, así que:
[My Test URL|https://www.mywebsite.c om/test?param=123]Quiero reemplazar todos aquellos con la contraparte HTML, así que:
<a href="https://www.mywebsite.com/test?param=123">My Test URL</a>Sé que con la expresión regular "/[(.*?)]/" puedo hacer coincidir los corchetes, pero ¿cómo puedo dividir por la tubería, eliminar los espacios en blanco en la URL y convertir todo en una cadena?
Si solo desea eliminar los espacios (en blanco) en la parte de la URL en estos enlaces de descuento, puede usar un mero preg_replace como
preg_replace('~(?:\G(?!\A)|\[[^][|]*\|)[^][\s]*\K\s+(?=[^][]*])~', '', $text)Vea la demostración de expresiones regulares . Detalles :
(?:\G(?!\A)|\[[^][|]*\|) - final de la coincidencia anterior o [ , luego cero o más caracteres que no sean [ , ] y | y luego un | carbonizarse[^][\s]* - cero o más caracteres que no sean [ , ] y espacios en blanco\K - descartar todo el texto coincidente hasta el momento\s+ - uno o más espacios en blanco(?=[^][]*]) : debe haber cero o más caracteres que no sean [ y ] y luego un ] inmediatamente a la derecha de la ubicación actual. Si desea eliminar espacios dentro de la parte de la URL y convertir la reducción a HTML, es mejor que use preg_replace_callback :
$text = '[My Test URL|https://ww w.mywebsite.c om/t est?param=123]'; echo preg_replace_callback('/\[([^][|]*)\|([^][]+)]/', function($m) { return '<a href="' . str_replace(' ', '', $m[2]) . '">' . $m[1] . '</a>'; }, $text);Vea la demostración de PHP . Detalles :
\[ - un [ carácter([^][|]*) - Grupo 1: cualquier cero o más caracteres distintos de [ , ] y |\| - un | carbonizarse([^][]+) - Grupo 2: uno o más caracteres distintos de ] y [] - un ] carácter.Si desea eliminar todos los WHITESPACES de una cadena en php , todo lo que necesita hacer es:
$string = str_replace(' ', '', $string);
Donde $string es su cadena con la url .
Creo que esto lo hará por ti
$html = "[My Test URL|https://www.mywebsite.c om/test?param=123] [My Test URL|https://www.mywebsite.com/test?param=123]"; $html = preg_replace_callback("|\[.*?\|.*?\]|", function($matches){ list($anchor, $link) = explode("|",substr($matches[0], 1, -1)); return "<a href='".str_replace(' ', '', $link)."'>$anchor</a>"; }, $html); echo $html; // echos <a href="https://www.mywebsite.com/test?param=123">My Test URL</a> <a href="https://www.mywebsite.com/test?param=123">My Test URL</a>