PHP-使用正则表达式更改文本

PHP-使用正则表达式更改文本,php,html,regex,string,preg-replace,Php,Html,Regex,String,Preg Replace,我知道这个问题已经被问了很多次了,但是我已经在网站上搜索过了,我还没有找到解决办法 我试图“覆盖”php的函数echo,我的目标是过滤所有文件中的所有php输出。 我需要用以下指令替换html文本: echo"SOME STRING" 与: 及 与 以下是完成此项工作的方法: $in = <<<EOD echo"SOME STRING" echo("SOME STRING") echo"SOME STRING"; echo("SOME STRING"); EOD; $ou

我知道这个问题已经被问了很多次了,但是我已经在网站上搜索过了,我还没有找到解决办法

我试图“覆盖”php的函数
echo
,我的目标是过滤所有文件中的所有php输出。 我需要用以下指令替换html文本:

echo"SOME STRING"
与:


以下是完成此项工作的方法:

$in = <<<EOD
echo"SOME STRING"
echo("SOME STRING")
echo"SOME STRING";
echo("SOME STRING");
EOD;


$out = preg_replace('/echo\(?(.+?)\)?(?=;|\R)/', 'echo_custom($1)', $in);
echo $out,"\n";
说明:

echo_custom("SOME STRING")
echo_custom("SOME STRING")
echo_custom("SOME STRING");
echo_custom("SOME STRING");
echo        : literally
\(?         : optional opening parenhesis
(           : start group 1
    .+?     : 1 or more any character but newline, not greedy
)           : end group 1
\)?         : optional closing parenthesis
(?=         : positive lookahead, make sure we have after
    ;       : semicolon
  |         : OR
    \R      : any kind of linebreak
)           : end lookahead

将系统中的
echo()
函数替换为
echo\u custom
并在完成筛选后调用该函数中的
echo()
不是更实际吗?如果覆盖echo,则必须运行另一个函数来打印信息。因此。。。实际上,您并不是要覆盖
echo
“函数”(*ahem*语言结构是迂腐的)只是grep代码库以用自定义函数替换它?@Rafael,我在引号之间加了override一词,因为
echo
不是函数,而是语言语句。它不能被重新定义。你的答案正是我想做的,但是我需要替换数百个文件,所以我需要grep代码库,用一个自定义函数替换它,就像他写的@CD001@B001一样ᛦ 我希望你的回答不是讽刺性的,因为“这个问题”我指的是一个与正则表达式函数有关的问题。@Daniele,除非被激怒,否则我反对使用讽刺。你是对的,我倾向于忽略这个事实,但记住这一点很重要。虽然,您可以从php重命名函数,但不能重命名语言结构,因此,记住这一点,Dave在这个问题中建议了一个变通方法:@Rafael我说“我希望您的答案不是讽刺性的”时并不是指您,无论如何,感谢您的贡献和与变通方法相关的链接。
$in = <<<EOD
echo"SOME STRING"
echo("SOME STRING")
echo"SOME STRING";
echo("SOME STRING");
EOD;


$out = preg_replace('/echo\(?(.+?)\)?(?=;|\R)/', 'echo_custom($1)', $in);
echo $out,"\n";
echo_custom("SOME STRING")
echo_custom("SOME STRING")
echo_custom("SOME STRING");
echo_custom("SOME STRING");
echo        : literally
\(?         : optional opening parenhesis
(           : start group 1
    .+?     : 1 or more any character but newline, not greedy
)           : end group 1
\)?         : optional closing parenthesis
(?=         : positive lookahead, make sure we have after
    ;       : semicolon
  |         : OR
    \R      : any kind of linebreak
)           : end lookahead