[英]Replace a repeating pattern using regex
我想在源代码中替换所有未引用的数组键:
$array[keyValue]
引用的数组键:
$array['keyValue']
对于单维数组,这个正则表达式允许我这样做:
preg_replace('/\$([a-z-_0-9]+)(\[([a-z][a-zA-Z-_0-9]+)\])+/', '\$$1['$3']', $input_lines);
测试: https : //www.phpliveregex.com/p/pXc
请注意我的所有键都以小写字母开头。
当我有多维数组并且我想要改变时,我的问题出现了:
$array[keyValue1][keyValue2]
至 :
$array['keyValue1']['keyValue2']
甚至
$array[keyValue1]...[keyValueN]
至
$array['keyValue1']...['keyValueN']
对于较大尺寸的数组。 我做多次匹配模式的尝试最终在第一个开口括号[
和最后一个]
匹配作为一个匹配。
编辑:执行此操作的原因是为了避免错误和通知
E_NOTICE : type 8 -- Use of undefined constant key - assumed 'key' -- at line 2
在我的日志中
注意:注意预定义的常量。 这不会也不能忽略它们。
您需要使用\\G
进行连续匹配。 将preg_replace
与以下正则表达式一起使用:
(\$\w+\[|\G(?!\A)\[)([^]['"]+)\]
并将以下字符串作为替换字符串:
$1'$2']
PHP代码:
preg_replace('~(\$\w+\[|\G(?!\A)\[)([^][\'"]+)\]~', '$1\'$2\']', $str);
正则表达式崩溃:
(
开始捕获组#1
\\$\\w+\\[
匹配$
然后是一些单词字符然后是一个左括号 |
要么 \\G(?!\\A)
从上一场比赛结束的地方开始比赛 \\[
匹配一个开口括号 )
捕获组#1结束 (
开始捕获组#2
[^]['"]+
匹配[
, ]
, '
和"
)
捕获组#2结束 \\]
匹配一个结束括号
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.