我想使用单个正则表达式将完全限定的路径(例如/home/user/java/project/src/main/java/com/website/project/File.java)转换为相应的Java包.
这意味着,我想删除之前的所有内容,包括“java/”(文件名加上前导斜杠)。然后将所有剩余的斜线变成点。
通过使用以下匹配子句,我似乎能够走得很远
.+main\/java\/|\/|[a-zA-Z$]+(\.java)
并替换为点。 (正则表达式基本上查找“main/java/”之前的所有内容,包括“main/java/”,然后将所有/替换为 .,然后删除文件名。
问题是我现在有太多的点,显然我无法摆脱它们,因为我正在用点替换:)
由于我不太擅长正则表达式,所以我可能使用了完全错误的方法......
我非常感谢任何帮助。
PS:不幸的是,我只需要使用一个正则表达式,因为我只能注入(inject)一个正则表达式,而不能将结果保存到临时变量或类似的东西中。
非常感谢!
编辑
我正在尝试为 TextMate/Sublime Text 创建 tmSnippet。 我想将短语“package com.company.project”(当然是实际的包名称)自动添加到新文件中。 问题是,在这样的代码片段中,您可以获取文件的完整路径,并在输出之前通过正则表达式运行它。这就是为什么我只能使用一个正则表达式。
编辑2
我能够通过使用 python 脚本并将其作为 Sublime Text 中的命令运行来完成我想要的操作。 有兴趣的可以看这个GitHub commit 。我仍然很好奇是否有可能将所有这些变成一个单一的正则表达式。我什至不确定这是否可能......
最佳答案
我不太确定你想要做什么以及需要在哪里“注入(inject)”这个正则表达式,但是以下正则表达式将返回两个捕获组,第一个是Java文件的路径,第二个是Java文件的路径是文件名本身:
.+main\\/java\\/([[A-Za-z0-9]+\\/]+)\\/([A-Za-z0-9]+)\\.java
然后,您可以将第一个捕获组上的 '/'
替换为 '.'
,然后附加一个点和第二个捕获的字符串,为您提供完全限定的 Java类名。
正如我所说,我不确定为什么您有无法使用变量的限制,但希望工作正则表达式对您来说是一个进步。
关于java - 正则表达式:Java 包的完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491344/