日期:2014-05-20  浏览次数:20748 次

疑问,关于 java 中的 正则式问题
现在有这么一个需求,要把一个字符串中的单引号 ' 换为 \' ;
例:
字符串:FUN FILMS FOR SUMMER-(3-1-A)-You'll smile
处更后:FUN FILMS FOR SUMMER-(3-1-A)-You\'ll smile

java 处理过程,是这样的:
String str="FUN FILMS FOR SUMMER-(3-1-A)-You'll smile";
System.out.println(str.replaceAll("(?<!\\\\)'","\\\\'"));

正则式试了半天,试出来了,在环视中的4个反斜线,很是不理解????还有后面的4个反斜线???

在 c# 中是这样的
 string str = "FUN FILMS FOR SUMMER-(3-1-A)-You'll smile";
 Console.Write(Regex.Replace(str, @"(?<!\\)'", "\\'"));
或者是
string str = "FUN FILMS FOR SUMMER-(3-1-A)-You'll smile";
Console.Write(Regex.Replace(str, "(?<!\\\\)'", "\\'"));

高手能给个合理的解释 ?

------解决方案--------------------
这问题只怕也比较周经了。见谅。。。

这是两次转义的问题。

因为 \ 在字符串中是转义字符,所以当你需要在字符串中输出一个 \,你就必须写:
System.out.println("\\")
类似的,你要输出一个双引号,就得写:
System.out.println("\"")
这个好理解吧?

不幸的是,在正则表达式中 \ 还是转义字符,比如:$表示“行末”,那么你如果要表示 $,不能直接写,必须写成:\$;类似的你要表示 \,只能写\\

再重新回到字符串的问题,当你要表示\\,就只能写:
System.out.println("\\\\")
不知道你理解了不?