Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/08/2003, 00:24
leonardop
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 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