<select name="address_town" id="address_town" class="locationTown">
<option value="#ANY">Empty</option>
<option value="438" >First</option>
<option value="420" >Second</option>
</select>
我想检索#ANY-Empty,438-First和420-Second的数据 我写了一个代码,但我只能检索第一个数据。我想要他们所有人。 我的代码如下:
preg_match_all('/<select[^>]+?address_town[^>]+?>(.*?)<\/select>/', $open, $matches);
$options = $matches[1];
foreach ($options as $select) {
preg_match_all('/<option value="(.*?)">(.*?)<\/option>/', $select, $matches2);
}
print_r($matches2);
感谢您的帮助..
答案 0 :(得分:2)
首先,至少在你的例子中,第一个preg_match_all是无用的。 然后获取您要求的数据只需执行此操作:
preg_match_all('/<option value="(.*?)"\s*>(.*?)<\/option>/', $html, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo $val[1].'-'.$val[2];
}
请注意我添加了&#34; \ s *&#34;在值=&#34;&#34;之后因为你在某些行上有空格。
您可能需要参考手册示例以获取更多信息http://php.net/manual/en/function.preg-match-all.php
编辑: 我没有尝试运行代码,但这就是精神:
preg_match_all('/<select[^>]+?address_town[^>]+?>(.*?)<\/select>/s', $open, $matches);
$options = $matches[1];
foreach ($options as $select) {
preg_match_all('/<option value="(.*?)"\s*>(.*?)<\/option>/', $select, $matches, PREG_SET_ORDER);
foreach ($matches as $val) {
echo $val[1].'-'.$val[2].'\n';
}
}
我在正则表达式的末尾添加了s修饰符,以便。*将接受换行符