<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>
我想用 php 正则表达式从这个 html 代码中提取“Afaceri,大众媒体,Publicitate,Agricultura”我该怎么办?
<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>
我想用 php 正则表达式从这个 html 代码中提取“Afaceri,大众媒体,Publicitate,Agricultura”我该怎么办?
html 和正则表达式可能有点滑;另一种解决方案,假设您的 html 片段的格式如上,在每个选项之后使用换行符可以使用strip_tags()
<?php
// your html fragment
$html = "<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>";
// explode by newline
$opts = explode(PHP_EOL, $html);
// use strip_tags on each element
$names = array_map(function($opt) {
return strip_tags($opt);
}, $opts);
// done
var_dump($names);
应该产生:
array (size=4)
0 => string 'Afaceri' (length=7)
1 => string 'Mass Media' (length=10)
2 => string 'Publicitate' (length=11)
3 => string 'Agricultura' (length=11)
希望这可以帮助。
这是一个对标签之间的字符串没有任何条件的正则表达式。
$names = preg_match_all('/<OPTION.*?>(.*?)<\/OPTION>/i', $string);
好吧,我们经常(几乎总是)建议使用DOM 解析器并提供手册链接,但我没有看到太多示例。
虽然regex
能够解析 html,但它不是正确的工具。您需要使用一些 dom 解析器来避免格式错误的 html 带来的头痛。PHP 提供了很好的API来使用。
例如,您应该执行以下操作DOMDocument
以获得所需的输出:
<?php
$html = <<<HTML
<OPTION value=a.a.>Afaceri</OPTION>
<OPTION value=a.b.>Mass Media</OPTION>
<OPTION value=a.c.>Publicitate</OPTION>
<OPTION value=b.a.>Agricultura</OPTION>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('option');
$result = array();
foreach ($nodes as $node) {
$result[] = $node->nodeValue;
}
var_dump($result);
你可以尝试这样的事情:/<OPTION [^>]+>([^<]+)<\/OPTION>/
这意味着:匹配文本“<OPTION”后跟一个或多个不是“>”的字符,然后匹配那个“>”并捕获一个或多个不是“<”的字符,然后是“</OPTION>” .
顺便说一句,如果你想避免转义,为了使正则表达式更干净,你可以使用不同的分隔符,如下所示:#<OPTION [^>]+>([^<]+)</OPTION>#