0
<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”我该怎么办?

4

4 回答 4

2

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)

希望这可以帮助。

于 2013-06-13T08:49:59.100 回答
1

这是一个对标签之间的字符串没有任何条件的正则表达式。

$names = preg_match_all('/<OPTION.*?>(.*?)<\/OPTION>/i', $string);
于 2013-06-13T08:43:03.997 回答
1

好吧,我们经常(几乎总是)建议使用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);

演示

于 2013-06-13T08:52:35.257 回答
0

你可以尝试这样的事情:/<OPTION [^>]+>([^<]+)<\/OPTION>/

这意味着:匹配文本“<OPTION”后跟一个或多个不是“>”的字符,然后匹配那个“>”并捕获一个或多个不是“<”的字符,然后是“</OPTION>” .

顺便说一句,如果你想避免转义,为了使正则表达式更干净,你可以使用不同的分隔符,如下所示:#<OPTION [^>]+>([^<]+)</OPTION>#

于 2013-06-13T08:41:12.550 回答