1

このため、解決策を探しています。PHP タグ (基本的に) 内のすべてのコンテンツを選択するのは簡単ですが、逆に機能するようには思えません。

まず、これがうまくいくと思いました:

/\?>(?<html>.*?)<\?|^(.*?)(?=<\?)|(?<=\? >)(.*?)$/

(?> と \<\? の間のすべて、^ と \<\? の間のすべて、?> と $ の間のすべて)

しかし、ここでの問題は、 で始まり、<?phpファイルの終わりまで他の終了タグが 1 つもないファイルは失敗することです。

結局のところ、<? ... ?>

THIS,<?php ... ?>
THIS<?php ... ?>
AND THIS

誰にもアイデアはありますか?ありがとう。

4

1 に答える 1

1

これを試して

$yourcode = <<<TXT
THIS
,
<?php 
... ?>
THIS

<?php 
... ?>
THIS TOO

<?php ... ?>AND 
THIS

TXT;

preg_match_all('/
    (?|
        ((?:(?!\?>).)+)(?:<\?php)          # all chars not containing "?>" sequence until "<?php"
        |                                  # or
        (?:\?>)((?:(?!\?>).)+)(?:<\?php)   # all chars not containing "?>" sequence between "?>" and "<?php"
        |                                  # or
        (?:\?>)(.+)                        # all chars after "?>"
    )/sx', 
    $yourcode,
    $matches
);
print_r($matches[1]);

必要なものはすべて最初のサブグループにあります。したがって、出力は次のようになります。

Array
(
    [0] => THIS
,

    [1] => 
THIS


    [2] => 
THIS TOO


    [3] => AND 
THIS

)
于 2013-01-15T22:53:19.840 に答える