2012-03-18 8 views
-1

私はいくつかの助けが必要です。私のデータ。私の正規表現パターンが失敗しました

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

私のパターンは、

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

しかし、機能しません。なにが問題ですか ?

+0

何が起こりますか? 「うまくいかない」とはどういう意味ですか?ご質問にお答えください。 –

答えて

0

2つの{foreach ...}領域の間の線を明示的に除外しようとしているパターンは、{'文字には一致しませんが、文字列には2つあります。そのミドルエリアのマッチは、{/ foreach}が続かないどこかで壊れているので、パターン全体が一致しません。

パターン全体が.*である必要があります。バックトラッキングを利用して、閉鎖{/foreach}をキャッチします。もちろん、これはリスト全体を1つのものとして誤ってマッチさせますが、一般的に正規表現は引用符とマッチできません(技術的には不規則でパフォーマンスが悪い逆参照はありません)。

+0

それは 's(PCRE_DOTALL)'も必要と思われました – kirilloid

+0

@kirilloidはいありがとう –