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