我怎樣才能得到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