Foros del Web » Programando para Internet » PHP »

Expresiones regulares en PHP y MySQL

Estas en el tema de Expresiones regulares en PHP y MySQL en el foro de PHP en Foros del Web. Hola, vuelvo a publicar porque estoy teniendo problemas con las expresiones regulares, ya lei la documentacion correspondiente y algunos manuales pero sigo sin entender. Aca ...
  #1 (permalink)  
Antiguo 28/01/2011, 09:57
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 16 años, 6 meses
Puntos: 1
Expresiones regulares en PHP y MySQL

Hola, vuelvo a publicar porque estoy teniendo problemas con las expresiones regulares, ya lei la documentacion correspondiente y algunos manuales pero sigo sin entender. Aca les muestro el codigo para ver si pueden ayudarme:

Código PHP:
Ver original
  1. function getPageCode($code)
  2. {
  3.     // <a href="/q/AgQD/1/audio">Music</a>
  4.    
  5.     $total = preg_match_all("#<a href=\"/q/([a-zA-Z]{4})/1/music\">Music</a>#", $code, $tmp);
  6.     if($total == 0) return;
  7.    
  8.     return $tmp[1][0];
  9. }

Ahi lo que no logro entender bien es que significa el /q/([a-zA-Z]{4})/1 . Y despues


Bueno ahora lo otro que no entiendo:

Código PHP:
Ver original
  1. if($id_tag == 0){
  2.         // Consulta SQL Final (Insertar TAG)
  3.         $sql = "INSERT INTO tt_tags (tag, lastSearch) VALUES ('%s', $lastSearch);";
  4.         $query = sprintf($sql,mysql_real_escape_string($tag));
  5.         mysql_query($query);
  6.     }
  7.     else if($id_tag > 0){
  8.         // Consulta SQL Final (Actualizar TAG)
  9.         $sql = "UPDATE tt_tags AS t SET t.hits = t.hits + 1 , t.lastSearch = $lastSearch WHERE t.id_tag = %d;";
  10.         $query = sprintf($sql,$id_tag);
  11.         mysql_query($query);
  12.     }

Ahi no logro entender que significa por ej. el %s , es decir que es lo que inserta en el campo de la tabla eso, porque asi mirandolo no lo logro entender. Y lo que hace es insertar una cadena con el tag pero no entiendo como es que lo hace.

Lo mismo en donde dice %d .


Y vuelvo a aclarar que ya anduve leyendo la documentacion y algunos manuales pero no logro entender como es que funciona mi codigo :s.
  #2 (permalink)  
Antiguo 28/01/2011, 10:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Expresiones regulares en PHP y MySQL

te invito a leer esto:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

y esto...
http://php.net/sprintf
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/01/2011, 10:25
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Expresiones regulares en PHP y MySQL

Cita:
Iniciado por pateketrueke Ver Mensaje
Gracias, ya logre entender lo del sprintf , ahoa ire a por las expresiones regulares, pero una pregunta, hay una razon logica por la cual hacer esto:

Código PHP:
Ver original
  1. $sql = "UPDATE tt_tags AS t SET t.hits = t.hits + 1, lastSearch = '".time()."' WHERE t.id_tag = %d;";
  2.  
  3.         $query = sprintf($sql,$id_tag);
  4.  
  5.         mysql_query($query);

En vez de esto:

Código PHP:
Ver original
  1. $query = "UPDATE tt_tags AS t SET t.hits = t.hits + 1, lastSearch = '".time()."' WHERE t.id_tag = $id_tag;";
  2.  
  3.         mysql_query($query);

Creo que la segunda manera ademas de ser mas corta funcionaria de la misma manera, o no?
  #4 (permalink)  
Antiguo 28/01/2011, 10:46
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Expresiones regulares en PHP y MySQL

Cita:
Iniciado por aguila_393 Ver Mensaje
Creo que la segunda manera ademas de ser mas corta funcionaria de la misma manera, o no?
no, el hecho de usar %d obliga al valor dado a comportarse como un integer, de modo que resulta útil para evitar cierto tipo de inyecciones de SQL... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 28/01/2011, 15:51
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Expresiones regulares en PHP y MySQL

Estoy empezando a entender bien esto de las expresiones. Pero tengo una duda:

el codigo es este:
preg_match_all("#<td class=\"pager\">&nbsp;\(([0-9]+) total\)</td>#",$code,$tmp);
$result = trim($tmp[1][0]);

el $code tiene lo siguiente: <td class="pager">&nbsp;(5 en total)</td>

Lo que no me queda claro es que es lo que almacena en $tmp[1][0] y en el resto del array, por ej. $tmp[0][0] , $tmp[1][1] , $tmp [1][5] , etc.
  #6 (permalink)  
Antiguo 28/01/2011, 16:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Expresiones regulares en PHP y MySQL

igualmente en el enlace que te pase explica como funcionan las capturas...

cualquier segmento de la expresión capturado entre paréntesis suele almacenarse en dicho arreglo de salida... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 01/02/2011, 19:58
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: Expresiones regulares en PHP y MySQL

Tengo una duda mas. Como hago para capturar todo lo que este entre dos strings, tengo el siguiente codigo:
preg_match_all("#<img alt=\"Comments\" src=(.+?)</div>#", $code, $dwl);

eso me funciona solo si no hay nuevas lineas, pero necesito que selecciones toodo lo que se encuentra entre <img alt=\"Comments\" src= y </div> .

Como deberia hacerlo?
  #8 (permalink)  
Antiguo 01/02/2011, 21:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Expresiones regulares en PHP y MySQL

pues ya lo estas haciendo...

solo necesitas obtener el índice correcto de $dwl
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 17/08/2011, 05:17
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Respuesta: Expresiones regulares en PHP y MySQL

Hola a todos,

tengo la siguiente expresión regular recursiva en PHP (http://www.php.net/manual/es/regexp.reference.recursive.php):


Código PHP:
Ver original
  1. $pattern =  '/\{\{(([^{}]*|(?R))*)\}\}/is';

que funciona perfectamente para llaves anidadas, es decir, aceptaría las siguientes entradas:

{{infobox | () funciona correctamente }}
{{segundo ejemplo {{esto tambien}} funciona}}
{esto no} --> ésta no, porque no tiene doble {{ }}

Mi problema es que quiero que acepte entradas igual a las anteriores pero que comiencen por infobox, por ejemplo:

{{infobox {{texto}} }} --> que la acepte
{{otrapalabra }} --> no lo acepte

He probado de mil maneras (menos con la correcta jeje).

Un saludo y gracias

Última edición por batillus69; 17/08/2011 a las 05:28
  #10 (permalink)  
Antiguo 17/08/2011, 08:20
Avatar de eliza_ralves  
Fecha de Ingreso: junio-2009
Ubicación: Caracas
Mensajes: 126
Antigüedad: 14 años, 9 meses
Puntos: 2
De acuerdo Respuesta: Expresiones regulares en PHP y MySQL

Hola! un amigo me ha recomendado la siguiente página para expresiones regulares, tal vez te sirva.

Saludos!

AQUI

PD: es para ruby, pero le puedes buscar la vuelta.
__________________
“El mayor enemigo del conocimiento no es la ignorancia, sino la ilusión del conocimiento”— Stephen Hawking
  #11 (permalink)  
Antiguo 17/08/2011, 08:46
 
Fecha de Ingreso: agosto-2011
Mensajes: 5
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Expresiones regulares en PHP y MySQL

La verdad es que es muy básico lo que aparece en la página. Tendría que ser algo de estilo:

Código PHP:
Ver original
  1. $re = '/\{\{infobox(\{\{(([^{}]*|(?R))*)\}\})/is';

pero al probarlo no coge las entradas que necesito...

Etiquetas: expresiones, mysql, regulares
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.