为什么preg_match()不适用于我的表达式?

时间:2013-04-19 20:28:20

标签: php preg-match

我有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>

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

3 个答案:

答案 0 :(得分:1)

您需要使用PCRE_DOTALL (s)标记才能使点匹配为换行符:

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

但是,请允许我提醒您,使用RegEx解析HTML是一个坏主意。最好使用DOM Parser来解析像你这样的HTML文本。

答案 1 :(得分:1)

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

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

在这种情况下,符号充当分隔符。 i 标志使正则表达式不区分大小写, s 标志告诉它忽略换行符。我喜欢使用作为分隔符,您不必逃避&lt; &gt; = 字符,这在使用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 

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

答案 2 :(得分:0)

根据documentation.与换行符不匹配。