我想使用preg_match
获取以下选择标记之间的所有选项值<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 :(得分: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);