一直很奇怪为什么Java和Tcl的正则表达式之间有这样的一个差异,即Tcl正则表达式中的转义符\在Java正则表达式中一律会需要写成\\。
比如,Tcl的正则表达式为 "^Case\_name\s*\=\s*(.*)"
对应的Java正则表达式则需要写成 "^Case\\_name\\s*\\=\s*(.*)"
而如果需要去匹配字符串中的\,在Tcl中需要写成"\\",而在Java中需要写成"\\\\",
一个例外可能是要匹配字符串中的"(双引号),在Java中只需要写成"\""。
因为想要将正则表达式作为一个String的参量
传递给Java某个字符串的matches函数,发现正确的写法,恰恰就是需要将该参量的字符串形式写成如Tcl的正则表达式。或许这就是为什么Java要用双反斜杠而不是像Tcl中那样用单反斜杠的原因?
一个例子程序是:
String mp = "";
mp通过某配置文件来赋值而不是直接写成mp="xxxxx"
在配置文件中需要写成 ^Case\_name\s*\=\s*(.*)
等效于 直接赋值方式的 mp = "^Case\\_name\\s*\\=\\s*(.*)"
if (strLine.matches(mp)) {
Pattern
p = Pattern.compile(mp);
Matcher
match = p.matcher(strLine);
match.find();
String
value = match.group(1);
...
}