我想从xml文件中过滤一个用户名。该xml文件看起来像<player id="123456" name="somename" alliance="123"/>
。现在我尝试了以下正则表达式:preg_match("/name=\"(.*)\"/")
。但不知何故,尽管我已将\"
放在明星符号后面,但似乎我的正则表达式不会在第一个"
处停止,而是在第三个位置。这是我得到的:somename" alliance="123
这是什么原因?为什么我的正则表达式代码跳过第一个引号?
1
A
回答
4
.*
是贪婪的,它会匹配尽可能多的字符,因此它不会停止,直到字符串中最后一个"
之前。将其更改为.*?
并且它应该只匹配到下一个"
,因为?
会使重复延迟而不是贪婪。
看看regex reference page上的“懒惰而不是贪婪”一节。
1
它处于所谓的“贪婪”模式 - 它会匹配尽可能多的。
使用?
停止,像这样:
/name=\"(.*?)\"/
或者干脆从接受报价阻止它作为名称的一部分,就像这样:
/name=\"([^\"]*)\"/
0
$text ='<player id="123456" name="somename" alliance="123"/>';
if (preg_match("/name=\"([^\"]*)\"/", $text, $match))
{
$name = $match[1];
}
相关问题
- 1. 正则表达式:为什么我的正则表达式过滤不正确?
- 2. 为什么我的正则表达式中的最后一个表达式连接到第一个表达式?
- 3. 正则表达式跳过第一个匹配?
- 4. 为什么这个正则表达式允许星号通过?
- 5. 为什么flex正则表达式被跳过?
- 6. 为什么我的正则表达式让我写“,”(逗号)?
- 7. 通过正则表达式在比赛中跳出双引号
- 8. 为什么这个ruby代码比较正则表达式?
- 9. perl正则表达式跳过一行
- 10. 为什么我的正则表达式代码不显示html代码?
- 11. 正则表达式的引用,我错过了什么?
- 12. 正则表达式:引号中引号
- 13. 单引号,双引号和正则表达式的Javascript正则表达式
- 14. Perl正则表达式 - 为什么正则表达式/[0-9\.]+(\,,)/匹配逗号
- 15. 如何跳过第一次正则表达式匹配?
- 16. 为什么Java有一个replaceAll(正则表达式,替换),但replaceAll(正则表达式,正则表达式)?
- 17. 为什么我的代码跳过我的索引页?
- 18. 正则表达式:跳过模式
- 19. PHP单引号正则表达式的第一行文本
- 20. 为什么我的Python代码不运行我的正则表达式?
- 21. Java正则表达式 - 什么是错的这个代码
- 22. 正则表达式为电话号码
- 23. 为什么这个正则表达式会导致我的正则表达式引擎挂起?
- 24. MATLAB正则表达式跳过的话
- 25. 为什么我的正则表达式允许超过1
- 26. 这是什么Java正则表达式代码在做什么?
- 27. 为什么我的电话号码验证正则表达式不起作用?
- 28. 为什么我的Python代码跳过一个while循环?
- 29. 这个正则表达式代码有什么问题?
- 30. 电话号码正则表达式(正则表达式)在Python
可能会更好用一个XML解析器,而不是正则表达式。 – kapa 2012-08-09 23:33:23