使用PHP和RegEx从站点的源代码中获取所有选项值

Swa*_*der 1 php regex mysql web-crawler

我正在学习RegEx和网站抓取,并提出以下问题,如果得到解答,应该大大加快我的学习过程.

我以htmlencoded格式从网站上获取了表单元素.也就是说,我有$ content字符串,所有标签都完好无损,如下所示:

$content = "<form name="sth" action="">
<select name="city">
<option value="one">One town</option>
<option value="two">Another town</option>
<option value="three">Yet Another town</option>
...
</select>
</form>
Run Code Online (Sandbox Code Playgroud)

我想以这种方式获取网站上的所有选项:

array("One Town" => "one", "Another Town" => "two", "Yet Another Town" => "three" ...);
Run Code Online (Sandbox Code Playgroud)

现在,我知道这可以很容易地通过操纵字符串,切片切割它,搜索每个字符串中的子串,等等,直到我拥有我需要的一切.但我确信必须有一种更简单的方法来使用正则表达式,它应该立即从给定的字符串中获取所有结果.任何人都可以帮我找到一个快捷方式吗?我搜索过网络上最好的正则表达式网站,但无济于事.

非常感谢

Gor*_*don 6

请参阅解析HTML的最佳方法.找到以下DOM解决方案:

$dom = new DOMDocument;
$dom->loadHTMLFile('http://example.com');
$options = array();
foreach($dom->getElementsByTagName('option') as $option) {
    $options[$option->nodeValue] = $option->getAttribute('value');
}
Run Code Online (Sandbox Code Playgroud)

也可以用Regex来完成,但是当有很多本地和第三方解析器可供PHP使用时,我觉得用Regex编写一个可靠的HTML解析器是不切实际的.