1

我有 PHP 表达式:

preg_match("/\<div id=\"servertc\">(.+)\<\/div>/",$data,$out);

在我的 $data 中包含:

<div id="servertc">nowy serwer evolution!<br><br>
~ Server Info ~<br>
IP: axera.pl (Port: 7171)<br>
Online: 24/7<br>
World type: PVP (Protection level: &gt;100)<br>
House rent: disabled.<br>
~ Rates ~<br>
Experience From Player: x2<br>
Magic Level: x15<br>
Skills: x30<br>
Loot: x3<br>
Spawn: x3<br>
Houses: 100 level<br>
Guilds: 8 level (Create via website)<br>
Red Skull (24h): 25 unjustified kills per a day<br>
Black Skull (48h): 50 unjustified kills per a day<br>
Idle kick time = 15 minut<br>
~ Exp stages ~<br>
1-50: x 650<br>
51-75: x 450<br>
76-100: x 300<br>
101-150: x 150<br>
151-175: x 100<br>
176-190: x 75<br>
191-230: x 35<br>
231-250: x 20<br>
251-280: x 15<br>
281-300: x 8<br>
301 +: x 2 
</div>

脚本返回空数组。我的问题在哪里?

4

3 回答 3

1

您需要使用PCRE_DOTALL (s)标志来使点匹配换行符:

/\<div id=\"servertc\">(.+?)\<\/div>/s

但是,让我警告您,使用 RegEx 解析 HTML 是一个坏主意。更好地使用 DOM Parser 来解析像你这样的 HTML 文本。

于 2013-04-19T20:30:52.683 回答
1

这是您可以在这种情况下使用的正则表达式:

preg_match("#<div id=\"servertc\">(.+)</div>#is", $data, $out);

在这种情况下,#符号充当分隔符。i标志使正则表达式不区分大小写,s标志告诉它忽略换行符。我喜欢使用#作为分隔符的原因是您不必转义<>=字符,这在使用 HTML 代码时非常方便,就像在您的示例中一样。

因此,如果您使用我建议的正则表达式,您的$out[1]将包含:

nowy serwer evolution!<br>
<br>
~ Server Info ~<br>
IP: axera.pl (Port: 7171)<br>
Online: 24/7<br>
World type: PVP (Protection level: &gt;100)<br>
House rent: disabled.<br>
~ Rates ~<br>
Experience From Player: x2<br>
Magic Level: x15<br>
Skills: x30<br>
Loot: x3<br>
Spawn: x3<br>
Houses: 100 level<br>
Guilds: 8 level (Create via website)<br>
Red Skull (24h): 25 unjustified kills per a day<br>
Black Skull (48h): 50 unjustified kills per a day<br>
Idle kick time = 15 minut<br>
~ Exp stages ~<br>
1-50: x 650<br>
51-75: x 450<br>
76-100: x 300<br>
101-150: x 150<br>
151-175: x 100<br>
176-190: x 75<br>
191-230: x 35<br>
231-250: x 20<br>
251-280: x 15<br>
281-300: x 8<br>
301 +: x 2 

我希望这是您正在寻找的,我希望这个答案对您有所帮助。

于 2013-04-19T20:40:49.927 回答
0

根据文档.不匹配换行符。

于 2013-04-19T20:31:14.547 回答