php - 正则表达式:替换 sublime text 中的一些 php 代码

标签 php regex search replace sublimetext3

我是正则表达式的初学者,我想使用搜索替换 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 ')

但是还有另一种解决方法...

单行正则表达式解决方案

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

    getParam('.')
    

您可以手动或通过查找 \z 并用 getParam('.') 方法替换您需要的所有文件(然后不会让它成为单线!)

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

  2. 将正则表达式下方复制/粘贴到搜索字段中:

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

    \2\3\4\5
    
  4. 单击“全部替换”。

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

Live demo

关于php - 正则表达式:替换 sublime text 中的一些 php 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842930/

相关文章:

javascript - 内容安全策略 : Ignoring report-sample within script-src: strict-dynamic specified

php - 过滤、存储到数据库并输出文本区域的文本? Zend 框架 2.3.5

php - 正则表达式检测不在 {} 之间的所有内容,然后从匹配的内容中搜索

php - MySQL "LIKE"搜索不工作

c - 使用宽字符和 C 语言中的 search.h 库时出现的问题

php - laravel 5.6批量插入json数据

php - '?doing_wp_cron='

python - 主题标签的正则表达式打印出每个字母

java.util.regex.PatternSyntaxException : Illegal repetition near index 12

elasticsearch - ES基数未提供确切计数