Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/07/2013, 09:22
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Problema con preg_macth

Amigo: te lo hice con expresiones regulares (no una sino varias para bajarle a la complejidad de resolucion) pero te desaconsejo fuertemente el uso de expresiones regulares para parsear tags..... hay muchas variantes que ni siquiera estas considerando:

- Comillas simples o dobles
- El orden de los tribitos
- Cantidad de espacios entre atributos
- Otros atributos que puedan aparecer y tu no te los esperas o con otros valores
- Etc....etc

Usa SimpleXML y lee tu HTML como DOM y trabajalo asi:

Código PHP:
<?php

$html 
= <<<HTML
<html>
<head></head>
<body>
<h1>Probando SimpleXML</h1>
<input name="data[Hiring][name]" type="text" maxlength="255" value="525" id="HiringName" class="alguna" />
</body>
HTML;

$doc = new DOMDocument();
$doc->strictErrorChecking FALSE;
$doc->loadHTML($html);
$doc simplexml_import_dom($doc);

$result $doc->xpath('//input[@name="data[Hiring][name]"]');

var_dump($result);
Logicamente es un inicio.....ni siquiera se si te interprete complemente... pero yo empezaria por ahi... ahora que si me dices que si lo vas a buscar por id="HiringName" (o sea que hay uno solo de esos INPUT en todo el HTML) o por name="data[Hiring][name] o algun detalle mas te ayudo a obtener el VALUE

Sin embargo... para que no digas que es un "escape" ...te doy la solucion con REGEX que desconsejo ***

Código PHP:
<?php

$html 
= <<<HTML
<html>
<head></head>
<body>
<h1>Probando REGEX</h1>
<INPUT name="data[Hiring][name]" type="text" maxlength="255" value="525" id="HiringName" class="alguna" />
<input name="otra_cosa" style="" >
</body>
HTML;

$value null;
$patt '/<input[^>]*(?:\/)?>/i';

preg_match_all($patt,$html,$array_resul);
if (!empty(
$array_resul)){
  
$inputs $array_resul[0];

   
// deberian ignorarse espacios
   
$patt '/id="HiringName"/i'

    foreach (
$inputs as $input)
    {
        
preg_match($patt,$input,$arr);
        
        if (!empty(
$arr)){
            
// ahora busco el VALUE
            
$patt '/value="(.*?)"/i';
            
preg_match($patt,$input,$arr);
         
            if (!empty(
$arr)){
                
$value $arr[1];
            }
        }
            
    }

}

echo 
$value// 525
PD: tu puedes lograr que te funcione HOY con regex pero no puedes garantizar que con otros datos funcione mañana por la gran complejidad y variabilidad de los tags
__________________
Salu2!

Última edición por Italico76; 01/07/2013 a las 10:54