【问题标题】:PHP - Change of text with regexPHP - 使用正则表达式更改文本
【发布时间】:2019-02-02 19:48:11
【问题描述】:

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

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

echo"SOME STRING"

与:

echo_custom("SOME STRING")

echo("SOME STRING")

echo_custom("SOME STRING)

【问题讨论】:

  • 将系统中的echo() 函数替换为echo_custom 并在执行过滤后在该函数中调用echo() 会不会更实用?如果你覆盖 echo,你将不得不运行另一个函数来打印信息。
  • 所以...你不是实际上试图覆盖echo "function"(*ahem* 语言结构是迂腐的) 只需 grep 将代码库替换为自定义函数?
  • @Rafael ,我把覆盖这个词放在引号之间,因为echo 不是一个函数,而是一个语言声明。它不能被重新定义。你的答案正是我想要做的,但我需要替换数百个文件,所以我需要 grep 代码库用自定义函数替换它,因为他写了@CD001 @B001ᛦ 我希望你的回答不是讽刺,对于“这个问题”,我的意思是与正则表达式函数相关的问题。
  • @Daniele,除非被激怒,否则我反对使用讽刺。你是对的,我倾向于忽略这个事实,但记住这一点很重要。虽然,您可以从 php 重命名函数,但不能重命名语言结构,因此,考虑到这一点,Dave 在这个问题中建议了一种解决方法:stackoverflow.com/questions/1873291/…
  • @Rafael 当我说“我希望你的回答不是讽刺”时,我并不是指你,无论如何感谢你的贡献以及与解决方法一起发布的链接。

标签: php html regex string preg-replace


【解决方案1】:

这是完成这项工作的一种方法:

$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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2019-11-29
    相关资源
    最近更新 更多