我正在尝试从长文件中提取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 :(得分: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);