Foros del Web » Programando para Internet » PHP »

Ayuda con las expreciones regulares

Estas en el tema de Ayuda con las expreciones regulares en el foro de PHP en Foros del Web. Holas tengo este problema con las expreciones regulares mis conocimientos en expreciones regulares no es muy bueno y no e podido conseguir hacer esto quiero ...
  #1 (permalink)  
Antiguo 14/08/2003, 23:39
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 14 años, 8 meses
Puntos: 0
Ayuda con las expreciones regulares

Holas

tengo este problema con las expreciones regulares mis conocimientos en expreciones regulares no es muy bueno
y no e podido conseguir hacer esto

quiero de un archivo de texto sacar lo que este dentro de la primera palabra que ingreso y la ultima osea algo haci

es te es un ejemplo de palabraqueingreso cualquier cosa palabraultima

lo que quiero sacar en este ejemplo seria cualquier cosa

e intentado haci pero no funciona

preg_match_all("(http:\/\/)(.*)(\.html)",$buffer,$reg);

y despues le hago esto para sacar el texto

echo $reg[1][1];


pero no funciona me arroja

Warning: Unknown modifier '(' in c:\appserv\www\prueba.php on line 7

gracias por cualquier ayuda
salu2
  #2 (permalink)  
Antiguo 15/08/2003, 00:03
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Prueba así...

preg_match_all("(http:\/\/)(\s\.*)(\.html)",$buffer,$reg);
__________________
Manoloweb
  #3 (permalink)  
Antiguo 15/08/2003, 00:20
 
Fecha de Ingreso: marzo-2003
Mensajes: 277
Antigüedad: 14 años, 8 meses
Puntos: 0
nop

Warning: Unknown modifier '(' in c:


si cambio

preg_match_all("(http:\/\/)[ \s\.*] (\.html)",$buffer,$reg);

me arroja

Warning: Unknown modifier '[' in c:



si cambio

preg_match_all("(http:\/\/)( \s\.*)[\.html]",$buffer,$reg);

me arroja

Warning: Unknown modifier '(' in c:

osea el problema estaria en el parentecis de al medio segun creo

(\s\.*)

ayuda
  #4 (permalink)  
Antiguo 15/08/2003, 01:24
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 4 meses
Puntos: 1
Hola,

No estoy seguro de entender por completo lo que tienes en mente, pero por lo que alcanzo a interpretar de tu segmento de código, creo que lo que deseas es algo más o menos como esto:

* Considerando la cadena de ejemplo inicial,
http://www.ejemplo.com/ruta/hacia/archivo.html

* Extraer la secuencia de caracteres ubicada entre los lexemas `http://' y `.html', es decir,
www.ejemplo.com/ruta/hacia/archivo


Si fuera este el caso, un pequeño programa que podría servirte sería:

Código:
<?php

echo "<pre>\n";

$buffer = 'http://www.ejemplo.com/ruta/hacia/archivo.html';

preg_match_all ('/http:\/\/(.*?)\.html/', $buffer, $reg);

print "Cadena inicial: $buffer\n";
print 'Primera coincidencia de la expresión regular: ' . $reg[1][0] . "\n";

print "\nContenido completo de la variable \$reg:\n";
print_r ($reg);

echo "</pre>\n";

?>

Este programa produciría la siguiente salida:

Código:
Cadena inicial: http://www.ejemplo.com/ruta/hacia/archivo.html
Primera coincidencia de la expresión regular: www.ejemplo.com/ruta/hacia/archivo

Contenido completo de la variable $reg:
Array
(
    [0] => Array
        (
            [0] => http://www.ejemplo.com/ruta/hacia/archivo.html
        )

    [1] => Array
        (
            [0] => www.ejemplo.com/ruta/hacia/archivo
        )

)
El problema que alcanzo a percibir de tu enfoque inicial es que tu patrón inicial en la función preg_match_all() no posee delimitadores apropiados (y aparentemente esta es la causa de la advertencia que recibes). En el ejemplo anterior, los delimitadores que uso son las barras inclinadas, `//', que se ubican al inicio y final de la expresión regular.

Entre los delimitadores se coloca el contenido de la expresión misma, y al final, después del delimitador de cierre, pueden colocarse algunos parámetros modificadores. De modo que el mensaje,

Cita:
Warning: Unknown modifier '(' in ... on line N
Probablemente sea el resultado del siguiente proceso:

- Tu expresión regular inicial es `(http:\/\/)(.*)(\.html)'
- El intérprete asume que los delimitadores son los paréntesis, `()'.
- Por consiguiente, cree que la expresión regular como tal es `http:\/\/' y que aquello que está después del paréntesis de cierre son modificadores
- Como consecuencia natural, `(.*)(\.html)' es tomada como la secuencia de modificadores
- El primer caracter de los modificadores es un paréntesis, y no es un modificador válido
- Recibimos la advertencia


El tema de las expresiones regulares es muy interesante, y una vez se adquiere cierta experiencia en su uso, muchísimos problemas relacionados con la manipulación de cadenas resultan considerablemente más cómodos. De hecho ésta es una de las razones más poderosas por las que Perl es un lenguaje tan apreciado por muchos (como ves, lo suficiente como para que PHP provea su propia implementación de expresiones regulares ``estilo Perl'').

Ciertamente te recomiendo que, en lo posible, leas la documentación pertinente en el manual de PHP. Creo que vale mucho la pena.. :)

Un cordial saludo
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 18:21.