帮助正则表达式(PHP,preg_replace)

时间:2010-08-05 05:29:23

标签: php regex preg-replace

我需要对字符串中的所有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。

我的正则表达技巧很差,有人可以修复我的正则表达式。谢谢。

4 个答案:

答案 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