Java,在正则表达式中转义(使用)引号

Spe*_*ump 2 java regex escaping

我正在尝试在Java中使用以下正则表达式,它应该匹配任何lang="2-char-lang-name":

String lang = "lang=\"" + L.detectLang(inputText) +"\"";
shovel.replaceFirst("lang=\"[..]\"", lang);
Run Code Online (Sandbox Code Playgroud)

我知道单个斜杠会被正则表达式解释为斜杠而不是转义字符(所以我的代码不起作用),但是如果我逃避斜线,那么"就不会再转义了,我会得到一个语法错误.

换句话说,我如何"在正则表达式中包含一个?"lang=\\"[..]\\""不行.我也尝试了三个斜杠,也没有任何匹配.

我也知道你不使用正则表达式来解析XML/HTML的一般规则.(并且shovel是一个XML)但是,我正在做的是,寻找一个lang在XML的前30个字符内的属性,并且我想要替换它.在这种情况下使用正则表达式真的是个坏主意吗?我不认为使用DOM会更好/更有效.

Dan*_*Tao 6

三个斜线是正确的(\\+ \"变为\+ "= \").(更新:事实上,事实证明,甚至没有必要.看起来单个斜杠也有效.)问题是你的使用[..]; 该[]符号是指"任何在这里的人物"(所以[..]只是意味着"任何字符").

放下[]你应该得到你想要的东西:

String ab = "foo=\"bar\" lang=\"AB\"";
String regex = "lang=\\\"..\\\"";
String cd = ab.replaceFirst(regex, "lang=\"CD\"");
System.out.println(cd);
Run Code Online (Sandbox Code Playgroud)

输出:

foo="bar" lang="CD"
Run Code Online (Sandbox Code Playgroud)