您必须查看源代码才能看到结果,但这是我想出的:
$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
另一种选择是检查<?
(space) 的速记 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);