2016-10-19 61 views
1

我想用的preg_match的preg_match在PHP的選擇標記

<select id="current-statement" name="current-statement" data-reactid=".4.2.2.1.0.2.1.1.0"> 
<option value="current" data-reactid=".4.2.2.1.0.2.1.1.0.0">Current Statement</option> 
<option value="90989266-c853-289b-dfea-3cdfe2213db7" data-reactid=".4.2.2.1.0.2.1.1.0.1">1st Statement</option> 
<option value="165eb5ea-fd48-53c8-020b-6e3287859922" data-reactid=".4.2.2.1.0.2.1.1.0.2">second statement</option> 
<option value="0d558fa0-8f48-afa2-7a9a-e8f85fbbbc42" data-reactid=".4.2.2.1.0.2.1.1.0.3">third statement</option> 
<option value="9c78f8aa-3b09-4574-1c10-8f450b45eb5b" data-reactid=".2.0.0.1.0.2.1.1.0.4">4th statement</option> 
</select> 

我試圖讓它像下面的preg_match但未能如願

preg_match("'<select id=\"current-statement\" name=\"current-statement\" data-reactid=\".4.2.2.1.0.2.1.1.0\">(.*?)</select>'", $content, $match); 

if($match) echo "result=".$match[1]; 

得到下面選擇標籤之間的所有期權價值請幫忙

+0

爲什麼不使用DOM?使用DOM,這應該是相當直接的。使用正則表達式,你將不得不執行至少2個步驟(如果你想要一個可讀的解決方案),或者一個巨大的正則表達式與'\ G'操作符,並且不能保證它總能正常工作。 –

回答

0

隨着DOM,任務減少到編寫一個工作XPath表達式:

//select/*/text() 

其中

  • //select - 找到所有select標籤
    • /* - 那裏面
      • /text()任何一個孩子 - 獲取文本節點。

PHP demo

$html = <<<DATA 
<select id="current-statement" name="current-statement" data-reactid=".4.2.2.1.0.2.1.1.0"> 
<option value="current" data-reactid=".4.2.2.1.0.2.1.1.0.0">Current Statement</option> 
<option value="90989266-c853-289b-dfea-3cdfe2213db7" data-reactid=".4.2.2.1.0.2.1.1.0.1">1st Statement</option> 
<option value="165eb5ea-fd48-53c8-020b-6e3287859922" data-reactid=".4.2.2.1.0.2.1.1.0.2">second statement</option> 
<option value="0d558fa0-8f48-afa2-7a9a-e8f85fbbbc42" data-reactid=".4.2.2.1.0.2.1.1.0.3">third statement</option> 
<option value="9c78f8aa-3b09-4574-1c10-8f450b45eb5b" data-reactid=".2.0.0.1.0.2.1.1.0.4">4th statement</option> 
</select> 
DATA; 

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

$xpath = new DOMXPath($dom); 
$opts = $xpath->query('//select/*/text()'); 
$res = array(); 
foreach($opts as $opt) { 
    array_push($res, $opt->nodeValue); 
} 
print_r($res); 
+0

僅供教育目的,請參閱正則表達式解決方案:['preg_match_all('〜(?:(?!\ A)\ G <\/option>(?= [^ <] *(?:<(?!\/select) [^ *] *)* <\/select>)|