php preg_match问题

时间:2009-12-13 18:39:36

标签: php

如何从preg_match

获取 41P86246HOH7C1G4A983321910HDL63U9

input type =“text”value =“41P86246HOH7C1G4A983321910HDL63U9”id =“”

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

这样的事情:

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

哪个匹配value附带的双引号之间的所有内容,并为您提供:

string '41P86246HOH7C1G4A983321910HDL63U9' (length=33)


但是,作为旁注:如果你试图用正则表达式“解析”HTML,那么它通常不是“最好的”方式;对于正则表达式,HTML不够经常......

答案 2 :(得分:2)

简单地说,没有额外的字符:

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

您的结果位于$match[0];

答案 3 :(得分:0)

有这样的事情:

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

但你也可以用这个值来分割每个键中的字符串。

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'];
 }

答案 4 :(得分:0)

甚至不必使用正则表达式。只需使用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];
    }
}