我想从 xml 文件中过滤用户名。xml 文件看起来像<player id="123456" name="somename" alliance="123"/>
. 现在我尝试了以下正则表达式preg_match("/name=\"(.*)\"/")
:但不知何故,虽然我把\"
星号放在后面,但似乎我的正则表达式并没有停在第一个"
,而是停在第三个。这就是我得到的:somename" alliance="123
这是什么原因?
问问题
182 次
3 回答
4
.*
"
是贪婪的,它会匹配尽可能多的字符,所以它不会在你的字符串的最后一个之前停止。将其更改为.*?
并且它应该只匹配到下一个"
,因为它?
使重复变得懒惰而不是贪婪。
看看这个正则表达式参考页面上的“懒惰而不是贪婪”部分。
于 2012-08-09T23:30:26.803 回答
1
它处于所谓的“贪婪”模式——它会尽可能匹配。
使用?
来阻止它,如下所示:
/name=\"(.*?)\"/
或者只是阻止它接受引号作为名称的一部分,如下所示:
/name=\"([^\"]*)\"/
于 2012-08-09T23:30:57.217 回答
0
$text ='<player id="123456" name="somename" alliance="123"/>';
if (preg_match("/name=\"([^\"]*)\"/", $text, $match))
{
$name = $match[1];
}
于 2012-08-09T23:32:32.817 回答