较新版本的php允许您使用类似javascript的数组语法声明数组,如下所示:
$arr = [$var1, $var2];
出于兼容性原因,我想将其转换为较旧的php样式数组语法,即
$arr = array($var1, $var2);
所以我做了一个正则表达式,找到方括号之间的任何表达式,在它后面有0或1个空格的等号,它有效,它看起来像这样:
\=(\s){0,1}\[(.*?)+\]
并用array
分隔符替换方括号,所以
[ //stuff ]
变成了
array( //stuff)
因此,使用表达式组,我认为$0
将是整个正则表达式,$1
将是(\s){0,1}
,而$0
将是(.*?)+
},所以用这个替换
array\( $2 \)
应该做到这一点
除了1美元和2美元都是空字符串,所以我不确定我在这里缺少什么。我在Netbeans和Notepad ++中尝试过相同的结果。
答案 0 :(得分:2)
您的问题是捕获括号后的+
量词。如果你删除它,一切都应该工作。量化捕获组几乎绝不是一个好主意(如果你这样做,RegexBuddy会严厉警告你。)
=(\s?)\[(.*?)\]
<强>解释强>
(.*?)
匹配任意长度的字符串,最好是空字符串。如果您拥有正则表达式\[(.*?)\]
并将其应用于[a]
,则该组将按预期与a
匹配。
但是看看如果你使用正则表达式\[(.*?)+\]
会发生什么:
\[
匹配[
。(.*?)
匹配a
之前的空字符串并将其捕获。+
要求尽可能多地重复一次,所以让我们做一次:(.*?)
与a
匹配并捕获它,覆盖之前匹配的""
!(.*?)
匹配]
之前的空字符串并捕获它,覆盖之前匹配的"a"
。(.*?)
与]
匹配并捕获它,覆盖之前匹配的""
。\]
。备份。(.*?)
匹配]
之前的空字符串并捕获它,覆盖之前匹配的"]"
。\]
匹配]
。万岁!组1现在包含空字符串,组0(或JavaScript中的$&
)包含[a]
。