java - 正则表达式:Java 包的完整路径

标签 java regex path package sublimetext

我想使用单个正则表达式将完全限定的路径(例如/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/

相关文章:

mysql - 匹配 MySQL 中的正则表达式以排除括号中的重复词

javascript - 正则表达式字符计数,但有些计数为三个

java - 从 php 代码调用 java 应用程序时使用特定的 jvm 安装

java ThreadPoolExecutor超时不被遵守

python - 在 Python 中提取百分比之前的所有数字?

扫描仪的 Java 问题

algorithm - 验证无向树中最长路径的不同方法

java - 如何在 Spring 中为 JSP 表单使用绝对路径?

java - 字符串的 HashSet 占用太多内存,建议...?

java - 验证错误: Stack size too large (what does it mean?)