正则表达式:在sublime文本中替换一些PHP代码

时间:2018-02-17 15:34:47

标签: php regex search replace sublimetext3

我是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.

谢谢大家的回答。

1 个答案:

答案 0 :(得分:1)

这些过程无法在一个步骤中完成。您所要做的就是至少完成两个查找/替换功能。

  • '\]\['之后查找所有连续self::$_config::$_params次出现,并将其替换为.

  • 然后分别在\['和语句结束后查找\']$_params,将其替换为getParam('')

但是还有另一种解决方法可以做到这一点......

单线RegEx解决方案

  1. 将以下字符串放在文件的最后:

    getParam('.')
    
  2. 您可以手动或通过查找\z执行最高步骤,并使用getParam('.')方法替换您需要的所有文件(这样就不会使其成为单行!)

    1. 执行 ALT + R 以在“查找/替换”窗格中启用正则表达式搜索。

    2. 将正则表达式复制/粘贴到搜索栏中:

      ((self::\$_config::)\$_params\['(?=[\s\S]*(getParam\('))|\G(?!\A))(\w+)(?|'\](?!\s*\[)(?=[\s\S]*('\)))|'\]\['(?=[^.]*+(\.)))
      
    3. 将替换字符串下方复制/粘贴到替换字段中:

      \2\3\4\5
      
    4. 点击全部替换。

    5. 从文件末尾删除getParam('.')

    6. <强> Live demo