正则表达式在Sublime 3中将"array()"更改为"[]"

lim*_*ime 3 php regex sublimetext sublimetext3

又一个RegEx问题.我有很多PHP文件要从数组('foo','bar')更改为新样式['foo','bar']

到目前为止,我想出了这个:

array\(([^\(]*?)\)
Run Code Online (Sandbox Code Playgroud)

但它没有采用多行定义.我尝试过类似的东西,但更糟糕的是,因为它拾取了错误的右括号:

(?s)array\(([^\(].*?)\)
Run Code Online (Sandbox Code Playgroud)

例如,一些需要替换的数据:

$foobar = $this->foobar('foo_bar', array(
    'foo'   =>  array('foobar' => array('barfoo')),
    'bar' => array(
        'bar' => 'foobar',
        'foo' => 'barfoo',
)));
Run Code Online (Sandbox Code Playgroud)

所以上面的例子看起来像这样:

$foobar = $this->foobar('foo_bar', [
    'foo' => ['foobar' => ['barfoo']],
    'bar' => [ 
        'bar' => 'foobar',
        'foo' => 'barfoo',
 ]]);
Run Code Online (Sandbox Code Playgroud)

任何人?谢谢!

r-s*_*ein 5

到目前为止,我知道python正则表达式不支持嵌套括号和正则表达式一般不建议用于该任务.如果你不想写一个程序,但在ST做它我会推荐和其他方法.在环绕包确实在改变周围的括号一份好工作.你可以安装它:

  1. 选择所有阵列启动
  2. 删除数组关键字
  3. 在parens里面移动
  4. 将周围的parens改为括号.要做到这一点,请按下ctrl+shift+p并写入Surround: change surround.插入)第一个输入字段和]第二个输入字段.(如果你插入[它将在里面添加一个额外的空间.)

示范:

toggle_php_array_demo

  • S&R正在使用Boost正则表达式,而不是Python.它支持递归. (2认同)

Wik*_*żew 5

在Sublime Text中,您可以使用多个传递 

\barray(\(((?>[^()]++|(?1))*)\))
Run Code Online (Sandbox Code Playgroud)

并替换为  [$2].

模式匹配:

  • \b - 领先的单词边界
  • array - 文字字符序列 array
  • (\(((?>[^()]++|(?1))*)\))- 组1匹配嵌套的配对括号,并将成对括号之间的内容捕获到组2中(这就是为什么需要$2在替换中反向引用组2 ).