请参阅下面的选项列表,我正在尝试获取所选选项的值。
<select>
<option {class='test'} value="volvo" selected='selected'>Volvo</option>
<option {class='test'} value="saab">Saab</option>
<option {class='test'} value="mercedes">Mercedes</option>
<option {class='test'}value="audi">Audi</option>
</select>
在上面的例子中,我需要将volvo作为匹配的字符串。可能有也可能没有任何类参数。 如果选项字符串是
那就是<option {class='test'} value="volvo" selected='selected'>Volvo</option>
或
<option value="volvo" selected='selected'>Volvo</option>
正则表达式应该返回volvo。 这是适用于所有情况的正则表达式。
我试过
preg_match_all('/<option\sclass="[^"]*"\svalue="([^"]*)">([^>]*)<\/option>/', $string, $matches);`
但是没有返回所选项目的值。请帮忙。
答案 0 :(得分:0)
试试这个:
$re = '/^.*\<option.*value=(?:\'|")([a-z]*)(?:\'|").*(?=selected=(?:\'|")selected(?:\'|")).*$/m';
$str = '<select>\n <option {class=\'test\'} value="volvo" selected=\'selected\'>Volvo</option>\n <option {class=\'test\'} value="saab">Saab</option>\n <option {class=\'test\'} value="mercedes">Mercedes</option>\n <option {class=\'test\'} value="audi">Audi</option>\n</select> ';
preg_match_all($re, $str, $matches);
echo "<pre>";
var_dump($matches);
我从
中改变了表达式的逻辑/<option\sclass="[^"]*"\svalue="([^"]*)">([^>]*)<\/option>/
到此:
/^.*\<option.*value=(?:\'|")([a-z]*)(?:\'|").*(?=selected=(?:\'|")selected(?:\'|")).*$/m
并且工作正常。请参阅regex101 example
但是我真的不推荐正则表达式来解析html。 我认为你应该考虑其他方法来完成你的任务,例如。 how-do-you-parse-and-process-html-xml-in-php