comment puis-je 41P86246HOH7C1G4A983321910HDL63U9 de ce qui suit avec preg_matchproblème php preg_match
type d'entrée= "text" value = id "de 41P86246HOH7C1G4A983321910HDL63U9" = ""
comment puis-je 41P86246HOH7C1G4A983321910HDL63U9 de ce qui suit avec preg_matchproblème php preg_match
type d'entrée= "text" value = id "de 41P86246HOH7C1G4A983321910HDL63U9" = ""
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'];
}
merci beaucoup VDVLeon votre chemin est génial –
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
okz laissez-moi vérifier –
mais je veux seulement 41P86246HOH7C1G4A983321910HDL63U9 pas de caractères supplémentaires –
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é). –
DOMDocument::loadHTML("<$input>")->getElementsByTagName('input')
->item(0)->getAttribute('value');
Simplement, sans caractères supplémentaires:
preg_match('/(?<=value=")[0-9A-Za-z]+/', $str, $match);
Votre résultat est $match[0]
;
Assertions FTW! – Kornel
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];
}
}
'preg_match ("41P86246HOH7C1G4A983321910HDL63U9", $ str, $ match»); ' –
Maintenant, il semble que vous essayez d'analyser HTML avec des expressions régulières, ce qui est un énorme no-? –
@Anon .: Votre exemple ne fonctionnera pas puisque vous avez oublié les délimiteurs.;) – Gumbo