使用正则表达式从html select中获取选定的选项值

时间:2014-01-10 12:32:45

标签: php regex

请参阅下面的选项列表,我正在尝试获取所选选项的值。

<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);`

但是没有返回所选项目的值。请帮忙。

1 个答案:

答案 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