我需要对字符串中的所有PHP标记以及PHP标记之间的任何字符执行preg_replace。
例如,如果文件内容为:
Hey there!
<?php some_stuff() ?>
Woohoo!
应该留下的全部是:
Hey there!
Woohoo!
这是我的代码:
$file_contents = file_get_contents('somefilename.php');
$regex = '#([<?php](.*)[\?>])#e';
$file_contents = preg_replace($regex, '<<GENERATED CONTENT>>', $file_contents);
FAIL。
我的正则表达技巧很差,有人可以修复我的正则表达式。谢谢。
答案 0 :(得分:2)
试试这个正则表达式:
#<\?.*?\?>#
也应该使用短标签(没有'php')。
我认为您尝试的主要问题是您需要使用反斜杠转义问号,并且您使用的是方括号,而不应该使用方括号。方括号表示“选择其中任何一个字符”。
答案 1 :(得分:1)
$regex="/<?php (.*?)?\>/"
你也可以尝试这个适用于你的
答案 2 :(得分:0)
您可以尝试:
$regex = '#<\?php.*?\?>#i';
使用的正则表达式:<\?php.*?\?>
<
:文字<
\?
:?
是匹配a的元数据
文字?
你需要逃避它。.*?
:非贪婪匹配任何内容。答案 3 :(得分:0)
使用正确的工具完成工作。 PHP tokenizer包含从周围内容中删除PHP代码所需的所有功能:
source.php
<p>Some HTML</p>
<?php echo("hello world"); ?>
<p>More HTML</p>
<?php
/*
Strip this out please
*/
?>
<p>Ok Then</p>
tokenize.php
<?php
$source = file_get_contents('source.php');
$tokens= token_get_all($source);
foreach ($tokens as $token) {
if ($token[2] == 3 || $token[2] == 1 || $token[2] == 9) {
echo($token[1]);
}
}
输出:
<p>Some HTML</p>
<p>More HTML</p>
<p>Ok Then</p>
这是一个简单的例子。文档会列出您可以查看的所有parser tokens。