【发布时间】:2026-01-02 08:00:01
【问题描述】:
又一个正则表达式问题。 我有许多 PHP 文件要从 array('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\()(.*)?\) -
Matei Mihai,请不要问我 =) 这不是我的决定,我们正在将旧项目更新为新框架,因此我们正在更改数组定义。
-
@lime 你给出的例子没有
array()s 和,,只有=>。你也想将array('foo' => 'bar')更改为['foo', 'bar']吗? -
或者你可以在Sublime Text中使用
array(\(((?>[^()]++|(?1))*)\))的多个pass并用[$2]替换
标签: php regex sublimetext3 sublimetext