Comunidad de diseño web y desarrollo en internet online

Expresion regular no funciona

Citar            
MensajeEscrito el 06 Ene 2012 03:14 pm
HOla, tengo la sigiente espresion regular

$info='
<a href="visita.php?campania=001&dest=http://www.google.com">link</a>
<a href="visita.php?campania=001&dest=http://www.google.com">link 2</a>
<a href="http://www.google.com">link 3</a>
<a href="http://www.andres.com">link 4</a>
<a href="http://www.forosdelweb.com">link 5</a>
';
$patron = array('/href="([^vis]+)"/is');
$sustitucion = array('href="visita.php?dest=$1"');
echo '<textarea cols="100" rows="10">'.preg_replace($patron, $sustitucion, $info).'</textarea>';

Lo que quiero es poder agregar visita.php?dest a todos los links que NO INICIEN con vis....

Esto es para que todos los links de mi landig qu eno tienen link al archivo visita.php ahora si lo tegan.


Agradesco la ayuda.

Por nes24

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Ene 2012 03:57 pm
Me parece que la solución no pasa por saber si no tiene "vis". De hecho la expresión que estás usando dice si no contiene alguna de las letras (y la cadena "andres" contiene una "s", al igual que forosdelweb").

Me parece que la solución sería buscar la cadena http:// después de href=" así:

Código PHP :

$info='
 <a href="visita.php?campania=001&dest=http://www.google.com">link</a>
 <a href="visita.php?campania=001&dest=http://www.google.com">link 2</a>
 <a href="http://www.google.com">link 3</a> 
 <a href="http://www.andres.com">link 4</a> 
 <a href="http://www.forosdelweb.com">link 5</a> 
';
$patron = array('/href="(http:\/\/.+)"/im');
$sustitucion = array('href="visita.php?dest=$1"');
echo '<textarea cols="100" rows="10">'.preg_replace($patron, $sustitucion, $info).'</textarea>';

Además he puesto el modificado "m" en vez de "s" para que preg_replace asuma que cada línea se trate por serparado.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Ene 2012 04:14 pm
Sin palabras, exelente!

Por nes24

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Ene 2012 04:30 pm
Oye y cuando hay mas de 1 digamos 3 en una sola linea ???

$info='
<a href="visita.php?campania=001&dest=http://www.google.com">link</a>
<a href="visita.php?campania=001&dest=http://www.google.com">link 2</a>
<a href="http://www.google.com">link 3</a>
<a href="http://www.andres.com">link 4</a>
<a href="http://www.forosdelweb.com">link 5</a> <a href="http://www.webd.com">link 6</a> <a href="http://www.webb.com">link 7</a>
';
$patron = array('/href="(http:\/\/.+)"/im');
$sustitucion = array('href="visita.php?dest=$1"');
echo '<textarea cols="100" rows="10">'.preg_replace($patron, $sustitucion, $info).'</textarea>';
exit;

Por nes24

6 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Ene 2012 04:56 pm
No había considerado ese caso porque asumí, tal como lo has puesto, que hay un <a> en cada línea.

Me temo que lo que se me ocurre que denerías hacer es poner los retornos de carro entre cada tag <a> antes de pasarlo por preg_replace().

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Ene 2012 05:11 pm
si seria buena opcion, o tambien podria poner todo el codigo dentro de 1 linea y que evaluara dicha linea.

tu podrias publciar un ejemplo donde solo se parsee y funcione en 1 linea?

Por nes24

6 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.