2009-12-13 6 views
0

comment puis-je 41P86246HOH7C1G4A983321910HDL63U9 de ce qui suit avec preg_matchproblème php preg_match

type d'entrée

= "text" value = id "de 41P86246HOH7C1G4A983321910HDL63U9" = ""

+2

'preg_match ("41P86246HOH7C1G4A983321910HDL63U9", $ str, $ match»); ' –

+3

Maintenant, il semble que vous essayez d'analyser HTML avec des expressions régulières, ce qui est un énorme no-? –

+0

@Anon .: Votre exemple ne fonctionnera pas puisque vous avez oublié les délimiteurs.;) – Gumbo

Répondre

0

Avec quelque chose comme ceci:

if(preg_match('@value="([^"]*)"@', $text, $m)){ 
    echo $m[1]; 
} 

Mais vous pouvez aussi faire quelque chose qui divisé la chaîne dans chaque clé avec cette valeur.

function attributes($text){ 
    $attrs = array(); 

    if(preg_match_all('@(\b[^=]*\b)\s*=\s*"([^"]+)"@', $text, $matches, PREG_SET_ORDER)){ 
     foreach($matches as $m){ 
      $attrs[$m[1]] = $m[2]; 
     } 
    } 

    return $attrs; 
} 

// Use like this 
$attrs = attributes('input value="bla"'); 
if(isset($attrs['value'])){ 
    echo $attrs['value']; 
} 
+0

merci beaucoup VDVLeon votre chemin est génial –

3

Qu'en est-il quelque chose comme ceci:

$str = 'input type="text" value="41P86246HOH7C1G4A983321910HDL63U9" id=""'; 
$m = array(); 
if (preg_match('#value="([^"]+)"#', $str, $m)) { 
    var_dump($m[1]); 
} 

Ce qui correspond à tout entre les guillemets qui viennent avec value, et vous obtenez:

string '41P86246HOH7C1G4A983321910HDL63U9' (length=33) 


Mais, comme sidenote: si vous essayez de façon « analyser » HTML avec regex, il est généralement pas le « meilleur »; HTML ne suffit pas tout à fait régulière pour ... regex

+0

okz laissez-moi vérifier –

+0

mais je veux seulement 41P86246HOH7C1G4A983321910HDL63U9 pas de caractères supplémentaires –

+0

quel "caractère supplémentaire" obtenez-vous? Le regex que j'ai posté n'a donné que ... U9 à la suite; les autres informations affichées autour de cette chaîne dans ma réponse sont la sortie de var_dump (avec Xdebug installé). –

6
DOMDocument::loadHTML("<$input>")->getElementsByTagName('input') 
    ->item(0)->getAttribute('value'); 
2

Simplement, sans caractères supplémentaires:

preg_match('/(?<=value=")[0-9A-Za-z]+/', $str, $match); 

Votre résultat est $match[0];

+0

Assertions FTW! – Kornel

0

ne même pas besoin d'utiliser regex. Il suffit d'utiliser les méthodes de chaîne de PHP

$str='input type="text" value="41P86246HOH7C1G4A983321910HDL63U9" id=""'; 
$s = explode(" ",$str); 
// go through each element, find "value" 
foreach($s as $a=>$b){ 
    if(strpos($b,"value")!==FALSE){ 
     $find = explode("=",$b); 
     print $find[1]; 
    } 
}