1

我想从 xml 文件中过滤用户名。xml 文件看起来像<player id="123456" name="somename" alliance="123"/>. 现在我尝试了以下正则表达式preg_match("/name=\"(.*)\"/"):但不知何故,虽然我把\"星号放在后面,但似乎我的正则表达式并没有停在第一个",而是停在第三个。这就是我得到的:somename" alliance="123 这是什么原因?

4

3 回答 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 回答