问题描述
我正在尝试替换 Java 格式的源代码中的每个声明的 String(使用 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"<);
}
}
想象一下这一切都存储在一个字符串中,可能没有换行符。我现在需要一个可以找到所有这些的正则表达式。我在处理字符串内的转义引号时遇到了问题。我最好的选择是".*[^\]"
。
只要不超过注释,它是否会检测到这些在注释里面都没有关系。
解决方法
如果您使用 BufferedLineReader 在另一个 Java 应用程序中阅读源代码并检查每一行,您可以使用以下正则表达式:
(?:\>\")(([\w\s]*)(\\"(?!\<)))*(?:\"\<)
但是,在 java replace 方法中使用时,您可能希望转义所有反斜杠。
例如:
lineAsString.replace((?:\\>\\")(([\\w\\s]*)(\\\\"(?!\\<)))*(?:\\"\\<),"youReplacementString");
也许需要额外的转义序列。此外,您可能希望在 \w
和 \s
旁边的字符串中添加更多允许的特殊字符。
我建议将该正则表达式粘贴到像 https://regex101.com/ 这样的正则表达式检查器和您的示例代码中以获得更多解释。