1

这就是我正在做的事情:我正在使用 Simple HTML Dom 从外部站点抓取一些 HTML,然后去掉空格,并尝试使用正则表达式来获取我需要的信息并将其放入数组中。这段代码运行良好,直到外部站点修改了他们的 HTML,我不得不想出一个新的正则表达式。我制作了一个似乎捕获了我想要的所有内容的正则表达式(我使用了 regexr.com),但由于某种原因,现在我将它插入到我的代码中它无法正常工作。这是PHP:

<?php
header("Content-Type: text/plain");

require('../classes/simple_html_dom.php');
$html = file_get_html('http://www.***.com/');
$player_array = array();
foreach($html->find('table#herodev_list td') as $ele){
    $ele = $ele->innertext;
    $html_string = $html_string.$ele;
}
$html_string = str_replace(" ", "", $html_string);
$regex = '/(?<=/avatar/).+?(?=/)/';
preg_match_all($regex, $html_string, $matches);
foreach($matches[0] as $player){
    array_push($player_array, strtolower($player));
}
print_r($player_array);

问题似乎在于 preg_match_all - 匹配数组是空的,所以我假设没有匹配。这是 $html_string 通常看起来的示例:

<imgsrc="http://minotar.net/avatar/Kainzo/10.png"><imgsrc="http://minotar.net/avatar/PuffinMuffin19/10.png"><imgsrc="http://minotar.net/avatar/neows0/10.png"><imgsrc="http://minotar.net/avatar/Sniped105/10.png"><imgsrc="http://minotar.net/avatar/EJBomber26/10.png"><imgsrc="http://minotar.net/avatar/GiantBeardedFace/10.png"><imgsrc="http://minotar.net/avatar/Montelu/10.png"><imgsrc="http://minotar.net/avatar/GreekCrackShot/10.png"><imgsrc="http://minotar.net/avatar/Marcellinius/10.png"><imgsrc="http://minotar.net/avatar/HelsEch/10.png"><imgsrc="http://minotar.net/avatar/NZD2000/10.png"><imgsrc="http://minotar.net/avatar/Mrchucklez/10.png"><imgsrc="http://minotar.net/avatar/Dragondrakar/10.png"><imgsrc="http://minotar.net/avatar/malita55/10.png"><imgsrc="http://minotar.net/avatar/Dazzlar/10.png">

我最好的猜测是 PHP 的正则表达式引擎与 Regexr 有所不同,或者我只是在做一些愚蠢的事情。自从我最初编写这个应用程序以来已经有几个月了,所以它的内部运作在我的脑海中并不新鲜。任何帮助表示赞赏。

另外,请不要给我旧的“不要使用正则表达式来解析 HTML……”的演讲。我知道。

顺便说一句,这是我的旧正则表达式,它可以正常工作(当然,输入是不同的)
(?<=^|>)[^><]+?(?=<|$):.

4

1 回答 1

4

您必须转义正则表达式代码中的 /。

-编辑-

ascii-lime 还指出您可以将分隔符更改为另一个非字母数字字符(有例外)。为此,将表达式开头和结尾的 / 更改为所选字符。例子:

'/.+\/regex.com\/index.html+./'

'!.+/regex.com/index.html+.!'
于 2012-08-22T05:22:54.100 回答