我有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: >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>
脚本返回空数组。我的问题在哪里?
答案 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: >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,.
与换行符不匹配。