Php 为什么我的正则表达式代码跳过第一个引号?

Php 为什么我的正则表达式代码跳过第一个引号?,php,regex,Php,Regex,我想从xml文件中筛选用户名。xml文件看起来像。现在我尝试了以下正则表达式:preg\u match(“/name=\”(.*)\”/”。但不知何故,尽管我把\“放在了星号后面,我的正则表达式似乎并没有停在第一个“而是停在第三个。这就是我得到的:somename“alliance=“123 原因是什么?*是贪婪的,它将匹配尽可能多的字符,因此它不会在字符串中最后一个“之前停止。将其更改为*?,它应该只匹配到下一个”,因为?使重复变得懒惰而不是贪婪 请看一看关于这一点的“懒惰而不是贪婪”部分。*

我想从xml文件中筛选用户名。xml文件看起来像
。现在我尝试了以下正则表达式:
preg\u match(“/name=\”(.*)\”/”
。但不知何故,尽管我把
\“
放在了星号后面,我的正则表达式似乎并没有停在第一个
而是停在第三个。这就是我得到的:
somename“alliance=“123

原因是什么?

*
是贪婪的,它将匹配尽可能多的字符,因此它不会在字符串中最后一个
之前停止。将其更改为
*?
,它应该只匹配到下一个
,因为
使重复变得懒惰而不是贪婪


请看一看关于这一点的“懒惰而不是贪婪”部分。

*
是贪婪的,它将匹配尽可能多的字符,因此它不会在字符串中的最后一个
之前停止。将其更改为
*?
,它应该只匹配到下一个
,因为
使重复变得懒惰而不是贪婪

看看“懒惰而不是贪婪”一节。这是所谓的“贪婪”模式——它将尽可能匹配

使用
停止该操作,如下所示:

/name=\"(.*?)\"/
/name=\"([^\"]*)\"/
或者干脆阻止它接受引号作为名称的一部分,如下所示:

/name=\"(.*?)\"/
/name=\"([^\"]*)\"/
它处于所谓的“贪婪”模式——它将尽可能匹配

使用
停止该操作,如下所示:

/name=\"(.*?)\"/
/name=\"([^\"]*)\"/
或者干脆阻止它接受引号作为名称的一部分,如下所示:

/name=\"(.*?)\"/
/name=\"([^\"]*)\"/
$text='';
if(preg_match(“/name=\”([^\“]*)\”/“,$text,$match))
{
$name=$match[1];
}
$text='';
if(preg_match(“/name=\”([^\“]*)\”/“,$text,$match))
{
$name=$match[1];
}

这里最好使用XML解析器而不是正则表达式。这里最好使用XML解析器而不是正则表达式。