正则表达式在 Sublime 3 中将 "array()" 更改为“[]”
Regex change "array()" to "[]" in Sublime 3
又一个 RegEx 问题。
我有许多 PHP 文件要从数组 ('foo', 'bar') 更改为新样式 ['foo', 'bar']
到目前为止我想到了这个:
array\(([^\(]*?)\)
但它不接受多行定义。我试过这样的事情,但更糟的是,因为它选择了错误的右括号:
(?s)array\(([^\(].*?)\)
例如需要替换的一些数据:
$foobar = $this->foobar('foo_bar', array(
'foo' => array('foobar' => array('barfoo')),
'bar' => array(
'bar' => 'foobar',
'foo' => 'barfoo',
)));
所以上面的例子看起来像这样:
$foobar = $this->foobar('foo_bar', [
'foo' => ['foobar' => ['barfoo']],
'bar' => [
'bar' => 'foobar',
'foo' => 'barfoo',
]]);
有人吗?谢谢!
该正则表达式在跨行匹配时应该没有问题,但它是不正确的。 [^\(].*?
确保左括号后的第一个字符不是另一个左括号,但在那之后,任何事情都会发生。您要确保所有字符都不是括号(打开或关闭)。这就是您所需要的:
array\(([^()]*)\)
替换为[]
。当然,您必须进行多次传递,直到没有更多匹配为止。
我假设永远不会有任何不属于 array(...)
结构的括号;有了它,工作就变得复杂多了。
据我所知 python 正则表达式不支持括号嵌套,一般不建议将正则表达式用于该任务。
如果您不想编写程序,但在 ST 中执行,我会推荐其他方法。 Surround 包在更改周围的括号方面做得很好。你可以安装它然后:
- select所有数组开始
- 删除数组关键字
- 移到括号内
- 将周围的括号更改为大括号。为此,请按
ctrl+shift+p
并输入 Surround: change surround
。在第一个输入字段中插入 )
,在第二个输入字段中插入 ]
。 (如果你插入[
,它会在里面添加一个space。)
示范:
在 Sublime Text 中,您可以使用多个通道
\barray(\(((?>[^()]++|(?1))*)\))
并替换为 []
。
模式匹配:
\b
- 前导词边界
array
- 文字字符序列 array
(\(((?>[^()]++|(?1))*)\))
- 第 1 组匹配嵌套的成对括号和 捕获 成对括号之间的内容到第 2 组(这就是为什么你需要使用
在替换中)。
又一个 RegEx 问题。 我有许多 PHP 文件要从数组 ('foo', 'bar') 更改为新样式 ['foo', 'bar']
到目前为止我想到了这个:
array\(([^\(]*?)\)
但它不接受多行定义。我试过这样的事情,但更糟的是,因为它选择了错误的右括号:
(?s)array\(([^\(].*?)\)
例如需要替换的一些数据:
$foobar = $this->foobar('foo_bar', array(
'foo' => array('foobar' => array('barfoo')),
'bar' => array(
'bar' => 'foobar',
'foo' => 'barfoo',
)));
所以上面的例子看起来像这样:
$foobar = $this->foobar('foo_bar', [
'foo' => ['foobar' => ['barfoo']],
'bar' => [
'bar' => 'foobar',
'foo' => 'barfoo',
]]);
有人吗?谢谢!
该正则表达式在跨行匹配时应该没有问题,但它是不正确的。 [^\(].*?
确保左括号后的第一个字符不是另一个左括号,但在那之后,任何事情都会发生。您要确保所有字符都不是括号(打开或关闭)。这就是您所需要的:
array\(([^()]*)\)
替换为[]
。当然,您必须进行多次传递,直到没有更多匹配为止。
我假设永远不会有任何不属于 array(...)
结构的括号;有了它,工作就变得复杂多了。
据我所知 python 正则表达式不支持括号嵌套,一般不建议将正则表达式用于该任务。 如果您不想编写程序,但在 ST 中执行,我会推荐其他方法。 Surround 包在更改周围的括号方面做得很好。你可以安装它然后:
- select所有数组开始
- 删除数组关键字
- 移到括号内
- 将周围的括号更改为大括号。为此,请按
ctrl+shift+p
并输入Surround: change surround
。在第一个输入字段中插入)
,在第二个输入字段中插入]
。 (如果你插入[
,它会在里面添加一个space。)
示范:
在 Sublime Text 中,您可以使用多个通道
\barray(\(((?>[^()]++|(?1))*)\))
并替换为 []
。
模式匹配:
\b
- 前导词边界array
- 文字字符序列array
(\(((?>[^()]++|(?1))*)\))
- 第 1 组匹配嵌套的成对括号和 捕获 成对括号之间的内容到第 2 组(这就是为什么你需要使用在替换中)。