3

長いファイルからphpコードを抽出しようとしています。PHPタグにないコードを捨てたいです。例

<html>hello world, its a wonderful day</html>
<?php echo $user_name; ?> Some more text or HTML <?php echo $datetime; ?> 
I just echoed the user_name and datetime variables.

次の配列を返したい:

array(
    [1] =>  "<?php echo $user_name; ?>"
    [2] =>  "<?php echo $datetime; ?>"
)

私は正規表現でこれを行うことができると思いますが、私は専門家ではありません。何か助けはありますか?これをPHPで書いています。:)

4

1 に答える 1

7

結果を見るにはソースコードを表示する必要がありますが、これは私が思いついたものです:

$string = '<html>hello world, its a wonderful day</html>
<?php echo $user_name; ?> Some more text or HTML <?php echo $datetime; ?> 
I just echoed the user_name and datetime variables.';

preg_match_all("/<\?php(.*?)\?>/",$string,$matches);

print_r($matches[0]); // for php tags
print_r($matches[1]); // for no php tags

更新: Reventで述べたように、簡略化された echo ステートメントを使用できます<?=preg_match_allこれを含めるように変更することが可能です:

$string = '<html>hello world, its a wonderful day</html>
<?php echo $user_name; ?> Some more text or HTML <?= $datetime; ?> 
I just echoed the user_name and datetime variables.';

preg_match_all("/<\?(php|=)(.*?)\?>/",$string,$matches);

print_r($matches[0]); // for php tags
print_r($matches[1]); // for no php tags

もう 1 つの方法は<?、省略形の php ステートメントの (スペース) をチェックすることです。\sこれを確認するために、スペース ( ) を含めることができます。

preg_match_all("/<\?+(php|=|\s)(.*?)\?>/",$string,$matches);

それは、あなたがどれだけ「厳格」になりたいかによると思います。

Update2: MikeMは、改行を意識することについて、良い点を指摘しています。タグが次の行にまたがる場合があります。

<?php 
echo $user_name; 
?>

sこれは、修飾子 toを使用することで簡単に解決できますskip linbreaks

preg_match_all("/<\?+(php|=|\s)(.*?)\?>/s",$string,$matches);
于 2013-04-04T21:18:47.140 に答える