我是regex的初学者,我想使用搜索替换Sublime Text 3编辑器中的一些代码,并使用regex替换。 这是一个我试图替换的例子:
要查找的一段PHP代码:
self::$_config::$_params['myKey1']['myKey2']['myKey3']['myKeyn']
并将其替换为:
self::$_config::getParam('myKey1.myKey2.myKey3.myKeyn')
可以在数组中定义一个或多个键。
我的搜索"正则表达式是:
self::\$_config::\$_params\['([a-zA-Z0-9]+)(?:(('\]\[')([a-zA-Z0-9]+))*)'\]
我正在寻找"替换"解决方案检索所有键以按预期格式化代码(getParam()方法而不是$ _params属性)重复捕获组$ 2:我不确定这是否可能是这样或最适合的成功方式。 显然,我有2美元的警告:"重复捕获组只捕获最后一次迭代"。
$2 is optional (unique key).
Each match in $3 ('\]\[') has to be replaced with a dot.
谢谢大家的回答。
答案 0 :(得分:1)
这些过程无法在一个步骤中完成。您所要做的就是至少完成两个查找/替换功能。
在'\]\['
之后查找所有连续self::$_config::$_params
次出现,并将其替换为.
然后分别在\['
和语句结束后查找\']
和$_params
,将其替换为getParam('
和')
但是还有另一种解决方法可以做到这一点......
将以下字符串放在文件的最后:
getParam('.')
您可以手动或通过查找\z
执行最高步骤,并使用getParam('.')
方法替换您需要的所有文件(这样就不会使其成为单行!)
执行 ALT + R 以在“查找/替换”窗格中启用正则表达式搜索。
将正则表达式复制/粘贴到搜索栏中:
((self::\$_config::)\$_params\['(?=[\s\S]*(getParam\('))|\G(?!\A))(\w+)(?|'\](?!\s*\[)(?=[\s\S]*('\)))|'\]\['(?=[^.]*+(\.)))
将替换字符串下方复制/粘贴到替换字段中:
\2\3\4\5
点击全部替换。
从文件末尾删除getParam('.')
。
<强> Live demo 强>