2013-04-04 180 views
3

我想從一個長文件中提取php代碼。我希望丟棄不在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寫這篇文章。 :)

+0

一個偉大的地方開始學習正則表達式是[www.regular-expressions.info](http://www.regular-expressions.info/)。 – jmbertucci 2013-04-04 21:19:59

回答

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提到的,你可以有<?=簡寫回聲統計。這將有可能改變你的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 

另一種方法是檢查<?(空間)的簡寫PHP語句。您可以包括一個空間(\s)檢查此:

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

我想這只是取決於如何「嚴」,你想要的。

Update2:MikeM確實很好,關於意識到換行符。您可能會遇到在您的標籤運行在進入下一行實例:

<?php 
echo $user_name; 
?> 

這可以很容易地通過使用s改性劑skip linbreaks解決:

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

PHP有時也可以使用短標籤,如<?=,所以您可能想添加到您的示例中。 – Revent 2013-04-04 21:20:50

+0

謝謝!我現在正在嘗試... – user1955162 2013-04-04 21:51:18

+1

您可能想要添加單行標記,以便在換行符之間匹配'.',即'/ s'。 – MikeM 2013-04-04 21:56:31