我的正则表达式模式失败了

时间:2012-03-18 21:25:37

标签: regex preg-match

我需要一些帮助。我的数据;

{foreach $page_list as $page}
    <li><a href="" title="{$page->name}">{$page->name}</a></li>
{/foreach}

我的模式;

~\{foreach\s\$(.+)\sas\s\$([^\{]+)\}([^\{]+)\{\/foreach\}~

但它不起作用。有什么问题?

1 个答案:

答案 0 :(得分:0)

您尝试排除两个{foreach ...}区域之间的线的模式明确地与“{”字符不匹配,但字符串中存在两个。由于该中间区域的匹配在某个地方没有被{/ foreach}跟随,因此整个模式无法匹配。

模式的整个部分可能应该是.*。依靠回溯来追赶收盘{/foreach}。当然,这会错误地将整个列表作为一个匹配,但正则表达式通常不能匹配引号(没有反向引用,这在技术上是非常规的并且会损害性能),因此您可能需要完全另外的解析策略。 p>