Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/09/2012, 09:24
NoiK
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 17 años, 3 meses
Puntos: 2
Exclamación Expresión regular: falla cuando hay más de 1 match

Buenas,

Necesito un script que me de un array del parámetro pasado a la función prueba() de una página en concreto. Me explico, si en la página prueba.php hay <span><?php prueba("hola"); ?></span><p><?php prueba("adios"); ?></p> necesito que me capture en un array "hola" y "adios".

He creado un script que recorre el archivo y mediante la función preg_match() captura lo que quiero:

Código PHP:
function get_prueba()
{
    
$file "test.php";

    
//más codigo de abrir el fichero

    
$patron '/prueba\((\"|\')(.+)(\"|\')\)\;/';
    while(!
feof($file))
    {
        if(
preg_match($patronfgets($file), $coincidencias))
        {
            
$keys[$i] = $coincidencias[2];
            
$i++;
        }    
    }
    
fclose($file);
    
print_r($keys);

Y el archivo $file contiene el siguiente código:

Código PHP:
<table>
    <tr>
        <td><?php prueba('hola'); ?></td>
        <td><?php prueba("que tal"); ?></td>        
        <td><?php prueba("adios"); ?></td>
    </tr>
</table>
Hasta aquí el resultado es correcto:

Cita:
Array ( [0] => hola [1] => que tal [2] => adios )
El problema viene cuando encuentra más de una función en la misma linea, algo como esto:

Código PHP:
<table>
    <tr>
        <td><?php prueba('hola'); ?></td><td><?php prueba("que tal"); ?></td>    
        <td><?php prueba("adios"); ?></td>
    </tr>
</table>
El array que me devuelve entonces es:

Cita:
Array ( [0] => hola'); ?> adios )
Como tengo que modificar el patrón para que me salga bien con más match en una misma linea?

Muchas gracias de antemano.