如何用正则表达式为数组键添加引号?支持CLI批量处理
可以用正则实现,附CLI批量处理命令
完全可以用正则表达式实现这个替换需求,下面是具体方案:
正则替换逻辑
我们需要匹配未被双引号包裹的数组键——也就是[xxx]格式中,[后无"、]前无"的内容,然后给键值前后加上双引号。
对应的正则替换规则:
- 查找模式:
\[([^"\]]+)\] - 替换模式:
["$1"]
这个正则的作用:
\[匹配左方括号([^"\]]+)捕获中间的键值,要求内容不包含双引号和右方括号(避免误处理已经加了引号的情况,比如["xxx"]不会被匹配)\]匹配右方括号- 替换时把捕获的键值用双引号包裹,再放回方括号中
CLI批量处理命令
要批量处理当前目录及子目录下的所有目标文件(比如PHP文件),可以用find结合perl命令实现原地修改,命令如下:
# 处理所有.php文件,如需其他后缀修改-name参数即可 find . -type f -name "*.php" -exec perl -pi -e 's/\[([^"\]]+)\]/["$1"]/g' {} \;
如果需要保留原文件备份(自动生成.bak后缀的备份文件),可以修改为:
find . -type f -name "*.php" -exec perl -pi.bak -e 's/\[([^"\]]+)\]/["$1"]/g' {} \;
命令说明
find . -type f -name "*.php":递归遍历当前目录下所有PHP文件-exec perl ... {} \;:对每个找到的文件执行perl替换命令-p:逐行处理文件内容并自动输出-i:原地修改文件(加.bak则会保留原文件的备份)-e:指定要执行的perl替换语句
测试你的示例代码:
原代码:
$alb_file = $row[a_name]."/".$row[i_filename]
执行命令后会变成:
$alb_file = $row["a_name"]."/".$row["i_filename"]
完全符合需求。
内容的提问来源于stack exchange,提问作者osomanden
相关产品推荐
相关产品推荐

