regex - 正则表达式从调用函数时使用的源代码中提取所有字符串
问题描述
我们有一个旧的、成熟的项目,其中包含数千个 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
解决方案
这里有一些步骤可以准确地得到你想要的。使用它,您可以对搜索结果进行查找和替换!
因此,您可以在适当的情况下进行顺序正则表达式查找/替换。替换可以只是在搜索结果编辑器中,根本不会影响底层文件——这就是你想要的。
如果您愿意,您还可以让替换操作实际编辑基础文件。
[提示:此技术还可以使在包含 term 的文件中查找项目a
/替换更容易。]b
c
(1) 打开一个新的搜索编辑器:++ Ctrl( 该命令当前未绑定到键绑定。)ShiftP
(2) 将此正则表达式粘贴到搜索输入框中(.*
选择正则表达式选项):
`(.*?)(\btrans\(['"]?)([^,'")]+)(.*)` - a relatively simple regex
请参阅我的其他答案,了解每行最多 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) 瞧。您现在可以将此搜索编辑器保存为文件。