【发布时间】:2019-12-02 00:18:42
【问题描述】:
我需要将我在 php 应用程序中的所有包含替换为它们的小写等效项。我正在将旧版应用程序转换为 Docker,并且该应用程序是在 windows 中构建的。
我有以下我测试过的正则表达式
(include.+)["'](\w+\.php)["'](.*)
我已经尝试将它放入一个像这样的单行 perl 命令中
perl -p -i -e '/(include.+)[\"\'](\w+\.php)[\"\'](.*)/\1\'\L\2\'\E\3/ `find ./ -name *.php`
但我得到一个错误
('L2' 之前缺少运算符?) Bareword 在 -e 第 1 行的“'L2'E3”附近找到操作员预期的位置 (E3 之前缺少运算符?) -e 第 1 行,行尾的未知正则表达式修饰符“/1” -e 第 1 行的语法错误,靠近 "/(include.+)[\"](w+.php)"'/1'L2'" -e 的执行由于编译错误而中止。
我只需要用$1'{lowercase $2}'$3 替换匹配的字符串,但我不是perl 或sed 向导。
编辑
几个php include语句的例子
include "something.php";
include_once "something.php";
include("SomethingElse.php");
include ('Something.php');
include_once("something.php");
include_once ("something.php");
【问题讨论】:
-
在 bash 的单引号中,反斜杠没有特殊含义。您不能在单引号中包含单引号。
'/(include.+)["'\'']... -
另外
find命令可以将不区分大小写的文件名与-iname匹配。 -
您能否展示一些要处理的实际
include语句示例? (一方面,'name.php'可以跟随什么?)我们如何提供无需任何测试用例就能“工作”的东西? :) -
edit 您的问题,以根据您发布的示例输入显示预期输出。
-
@choroba 出于好奇,显然有人可以使用 bash 的
$'...'引用(那美元是真的!)以允许在内部添加一些':perl -wE$'say "\'hi\'"'(我发现我还必须转义'才能显示,否则解析得很好但'不会打印)。