Php 为什么preg_match()没有';你对我的表情不满意吗?

Php 为什么preg_match()没有';你对我的表情不满意吗?,php,preg-match,Php,Preg Match,我在PHP表达式中有: preg_match("/\<div id=\"servertc\">(.+)\<\/div>/",$data,$out); preg\u匹配(“/\(.+)\/”,$data,$out); 在my$数据中包含: <div id="servertc">nowy serwer evolution!<br><br> ~ Server Info ~<br> IP: axera.pl (Port: 717

我在PHP表达式中有:

preg_match("/\<div id=\"servertc\">(.+)\<\/div>/",$data,$out);
preg\u匹配(“/\(.+)\/”,$data,$out);
在my$数据中包含:

<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>
nowy serwer evolution

~Server Info~
IP:axera.pl(端口:7171)
在线:24/7
世界类型:PVP(防护等级:100)
房屋租金:残疾人。
~Rates~
玩家体验:x2
魔法等级:x15
技能:x30
战利品:x3
繁殖:x3
房屋:100层
公会:8级(通过网站创建)
红色头骨(24小时):每天25次无理死亡
黑骷髅(48小时):每天50次无理死亡
怠速启动时间=15分钟
~Exp阶段~
1-50:x650
51-75:x450
76-100:x300
101-150:x150
151-175:x100
176-190:x75
191-230:x35
231-250:x20
251-280:x15
281-300:x8
301+:x2
脚本返回空数组。我的问题在哪里?

您需要使用flag使点与换行符匹配:

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

但是,我要警告您,使用正则表达式解析HTML是一个坏主意。最好使用DOM解析器来解析类似您的HTML文本。

根据,
与换行符不匹配。

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

preg_match("#<div id=\"servertc\">(.+)</div>#is", $data, $out);
preg#u匹配(“#(.+)#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 
nowy serwer evolution

~Server Info~
IP:axera.pl(端口:7171)
在线:24/7
世界类型:PVP(防护等级:100)
房屋租金:残疾人。
~Rates~
玩家体验:x2
魔法等级:x15
技能:x30
战利品:x3
繁殖:x3
房屋:100层
公会:8级(通过网站创建)
红色头骨(24小时):每天25次无理死亡
黑骷髅(48小时):每天50次无理死亡
怠速启动时间=15分钟
~Exp阶段~
1-50:x650
51-75:x450
76-100:x300
101-150:x150
151-175:x100
176-190:x75
191-230:x35
231-250:x20
251-280:x15
281-300:x8
301+:x2

我希望这就是您想要的,我希望这个答案对您有所帮助。

如果HTML输入是众所周知的,那么就没有问题。考虑到HTML和XML解析器,特别是DOMDocument,速度非常慢且占用CPU,这就更好了。@Havenard:这听起来像是一开始就在工作,但HTML非常不规则,可能会在意外的时候中断。只有在你不知道HTML的来源的情况下,在这种情况下,是的,你不能使用像RegEx这样的简单工具来做,但既然他知道自己把勺子放在哪里,他就可以放心地依靠它来提取他需要的数据,最后直到网站改变设计。
最后直到网站改变设计。
这也是我要强调的。@Havenard-这取决于改变。如果HTML从
更改为
,则正则表达式方法将失败。但是锁定在
//div[@id=“servertc”]
上的DOM方法将继续完美运行。
*
匹配0或更多。
匹配0或1,在这里是多余的。在较大的文件上,这可能会使匹配花费更多的时间。你是对的,我将其改为
(.+)
,而不是
(.*)