【发布时间】:2010-12-21 21:54:25
【问题描述】:
我正在尝试匹配一段文本中的带引号的字符串,并允许在其中包含转义的引号。我在在线测试器中尝试了这个正则表达式,它运行良好。但是,当我在 preg_match_all 中尝试时,它在第一个转义字符串处失败。
代码如下:
$parStr = 'title="My Little Website"
year="2007"
description="Basic website with ..."
tech="PHP, mySQL"
link="<a href=\"http://test.com\">test.com</a>"
';
$matches = array();
preg_match_all('/(\w+)\s*=\s*"(([^\\"]*(\\.)?)*)"/', $parStr, $matches, PREG_SET_ORDER); // Match[4][0] is 'link="<a href=\"'
最后一次匹配失败,只匹配到第一个转义引号。当我在http://www.regexplanet.com/simple/index.html 尝试这个表达式时,它运行良好。
正则表达式的相关部分是:
"(([^\\"]*(\\.)?)*)"
应该吃掉所有导致转义引号或引号的文本,然后吃掉可选的转义引号,该过程重复0次或更多次,直到找到非转义引号,其中匹配完成.
为什么这在 php 中不起作用?为什么它不起作用,应该如何解决?
【问题讨论】:
-
在 $parStr 中,你想找到什么?