首页 > 解决方案 > 正则表达式从调用函数时使用的源代码中提取所有字符串

问题描述

我们有一个旧的、成熟的项目,其中包含数千个 php 文件,需要对其进行清理。

在整个项目中,我们确实有很多函数调用,类似于:

trans('somestring1');
trans("SomeString2");
trans('more_string',$somevar);
trans("anotherstring4",$somevar);
trans($tx_key);
trans($anotherKey,$somevar);

所有这些都嵌入到代码中并代表翻译键。我想找到一种方法来提取所有出现的所有“翻译键”。

PHP 项目位于 VS Code 中,因此 RegEx 搜索有助于列出结果。或者我可以使用您推荐的任何其他工具搜索项目

但是,我还需要将字符串“导出”到文本文件或类似文件。

理想的结果是:

somestring1
SomeString2
more_string
anotherstring4
$tx_key
$anotherKey

作为奖励 - 如果有人知道,我怎么能得到上面的列表,包括找到结果的文件名 - 那真是太棒了!

任何帮助将不胜感激!

更新:我想出的正则表达式:

/(trans)+\([^\)]*\)(\.[^\)]*\))?/gim

列出完整的事件 - 我怎样才能得到结果的第一部分(在单引号之间或在双引号之间或以 $ 开头)请参阅此处:regexr.com/548d4

标签: regexvisual-studio-code

解决方案


这里有一些步骤可以准确地得到你想要的。使用它,您可以对搜索结果进行查找和替换!

因此,您可以在适当的情况下进行顺序正则表达式查找/替换。替换可以只是在搜索结果编辑器中,根本不会影响底层文件——这就是你想要的。

如果您愿意,您还可以让替换操作实际编辑基础文件。

[提示:此技术还可以使在包含 term 的文件中查找项目a/替换更容易。]bc

(1) 打开一个新的搜索编辑器:++ Ctrl( 该命令当前未绑定到键绑定。)ShiftP

(2) 将此正则表达式粘贴到搜索输入框中(.*选择正则表达式选项):

     `(.*?)(\btrans\(['"]?)([^,'")]+)(.*)`  - a relatively simple regex

正则表达式101演示


请参阅我的其他答案,了解每行最多 6 个条目的正则表达式:

(\s*\d+:\s)?((.*?)(\btrans\(['"]?)([^,'")]*)((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?((.*?)(\btrans\(['"]?)([^,'")]*))?)(.*)

(3) 您将获得包含搜索结果的文件列表。现在在此搜索编辑器中打开一个查找小部件Shift+ 。F

(4) 将相同的正则表达式放入 Find 输入中。选择了正则表达式选项。放入$3替换字段。这仅在此搜索编辑器中替换 -而不是原始文件(尽管在某些情况下您可以这样做)。 Replace All.


如果使用 1-6 版本的正则表达式,请替换为:

$1$5  $9  $13  $17  $21  $25

(5) 瞧。您现在可以将此搜索编辑器保存为文件。

搜索编辑器查找



推荐阅读