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会更好/更有效.
三个斜线是正确的(\\
+ \"
变为\
+ "
= \"
).(更新:事实上,事实证明,甚至没有必要.看起来单个斜杠也有效.)问题是你的使用[..]
; 该[]
符号是指"任何在这里的人物"(所以[..]
只是意味着"任何字符").
放下[]
你应该得到你想要的东西:
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)