2011-12-08 14 views
0

この質問は、私はそれが単一または二重引用符内のタグを見つけたときに一致しないために、この正規表現/<\?.*?(?:\?>|$)/sを拡張する必要がPHP's preg_match_all() to pull out all php tagspreg_match_all()PHPタグ

のパート2です。これは正規表現の直感的な理解を超えて、一致した引用型を逆参照することを伴います。


例HTML:

<? 
    // Test xml 
    $this->_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
    $this->_xml .= "<TransferredValueTxn xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n"; 
    $this->_xml .= "<?=$test?> <TransferredValueTxnReq>" . trans("test") . "\n"; 
?> 

は、結果を希望:

[0] => "<? 
    // Test xml 
    $this->_xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; 
    $this->_xml .= "<TransferredValueTxn xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" >\n"; 
    $this->_xml .= "<?=$test?> <TransferredValueTxnReq>" . trans("test") . "\n"; 
?>" 

答えて

0

/<\?(?:.*?(?:(\"|').*?[^\\]\1)*)*(?:\?>|$)/s

私のユニットテストの全てを完璧に動作。

1

をあなたがPHPを解析するためにPHPを使用しようとしている場合は、使用して試してみたいことtoken_get_all()機能。 PHPが実行しているコードを解析するのに使用するのと同じエンジンを使用して、多くの作業を行います。今後の参考のために

+0

私は肯定的ではありませんが、 'token_get_all()'がインラインPHPでHTMLを解析しないと言うことができる限り、私は達成しようとしているものです。 –

+0

それはすべきです!ただし、 "本当の"インタプリタのように短いタグが有効になっている場合は、 '<?'のみを認識することに注意してください。 – duskwuff

関連する問題