【发布时间】:2021-07-14 20:14:44
【问题描述】:
我正在尝试替换 Java 格式源代码中的每个声明的字符串(使用 java 本身)。从中删除字符串的源代码可能如下所示(>...
package a.b;
import b.a.*;
@SomeAnnotation(>"abc"<)
public class XY extends YZ {
String s = >"Hello \"World\""<;
public static void main(String[] args) {
System.out.println(>"Hello World"<);
}
}
想象一下,这一切都存储在一个字符串中,可能没有换行符。我现在需要一个可以找到所有这些的正则表达式。我在使用字符串中的转义引号时遇到问题。我最好的选择是".*[^\]"。
cmet里面是否会检测到这些无关紧要,只要不超出注释即可。
【问题讨论】:
-
用什么替换它,目的是什么?您最好在 intellij 之类的 IDE 中执行此操作,您可以将搜索限制在字符串文字内,而不是尝试自己执行。
-
你应该寻找一些java解析库。正则表达式不适合这种情况。
-
@Andy turner 这不适用于在开发期间编辑源文件。我正在开发一个程序,该程序接受一个有效java语法的字符串,编译并加载类。在编译代码之前,我必须弄清楚类和包名以适当地命名文件并将其放入正确的目录中。但我不能简单地搜索“类”来查找类名位置,因为可能有一些注释或注释带有包含该短语的字符串,所以我想先将其删除(将其替换为“...”或所以)
-
您根本无法使用正则表达式解析 Java,因为它不是正则语言——正如您所说的“因为可能有一些注释或注释”。使用编译器 API 检查抽象语法树。
-
这正是问题所在 - 我想编译字符串,但只能通过创建具有适当名称的文件来实现。不过,我已经解决了这个问题,首先将字符串解析为 java 标记,然后过滤掉注释标记并跳到包/类类型标记来评估名称和包。
标签: java regex pattern-matching