我怎样才能得到41P86246HOH7C1G4A983321910HDL63U9从的preg_matchPHP的preg_match问题
输入类型= “文本” 值= “41P86246HOH7C1G4A983321910HDL63U9” ID = “”
我怎样才能得到41P86246HOH7C1G4A983321910HDL63U9从的preg_matchPHP的preg_match问题
输入类型= “文本” 值= “41P86246HOH7C1G4A983321910HDL63U9” ID = “”
像这样的东西:
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'];
}
非常感谢VDVLeon你的方式是真棒 – 2009-12-13 18:53:52
什么像这样如下:
$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是不是很够的正则表达式规则...
okz让我检查 – 2009-12-13 18:45:42
但我只想要41P86246HOH7C1G4A983321910HDL63U9没有额外的字符 – 2009-12-13 18:48:46
你会得到什么“额外字符”?我发布的正则表达式只给了... U9作为结果;;其他信息显示在我的答案中的字符串是var_dump的输出(安装了Xdebug)。 – 2009-12-13 18:54:19
DOMDocument::loadHTML("<$input>")->getElementsByTagName('input')
->item(0)->getAttribute('value');
简单,没有多余的字符:
preg_match('/(?<=value=")[0-9A-Za-z]+/', $str, $match);
你的结果是$match[0]
;
断言FTW! – Kornel 2009-12-16 19:34:40
甚至不必使用正则表达式。只要使用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”,$海峡,$匹配“);' – 2009-12-13 18:43:41
现在它看起来像你试图解析使用正则表达式的HTML,这是一个巨大的无糖?编号 – 2009-12-13 18:45:14
@Anon:你的例子因为你忘了分隔符而不起作用;;) – Gumbo 2009-12-13 18:51:08