我是正则表达式的初学者,我想使用搜索替换 Sublime Text 3 编辑器中的一些代码,并用正则表达式替换。 这是我要替换的示例:
要查找的一段 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.
谢谢大家的回答。
最佳答案
这些过程不能一步完成。您所要做的就是至少完成两个查找/替换功能。
在
self::$_config::$_params
之后查找所有连续的'\]\['
并将其替换为.
然后寻找
\['
和\']
,分别在$_params
和语句结尾处替换为getParam('
and')
但是还有另一种解决方法...
单行正则表达式解决方案
将以下字符串放在文件的最后:
getParam('.')
您可以手动或通过查找 \z
并用 getParam('.')
方法替换您需要的所有文件(然后不会让它成为单线!)
在“查找/替换” Pane 中执行 ALT+R 以启用正则表达式搜索。
将正则表达式下方复制/粘贴到搜索字段中:
((self::\$_config::)\$_params\['(?=[\s\S]*(getParam\('))|\G(?!\A))(\w+)(?|'\](?!\s*\[)(?=[\s\S]*('\)))|'\]\['(?=[^.]*+(\.)))
将下面的替换字符串复制/粘贴到替换字段中:
\2\3\4\5
单击“全部替换”。
从文件末尾删除
getParam('.')
。
关于php - 正则表达式:替换 sublime text 中的一些 php 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842930/