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

java正则表达式的小问题
本帖最后由 jdgdf566 于 2013-11-20 20:52:51 编辑
匹配一个任意字符

"\\."

我用其它语言,一般都是

"."

其它语言这句:

"\\."

一般是匹配\加任意字符,例如“\a”。
那么,

"\\."

该怎么理解?

------解决方案--------------------
正则表达式使用通用术语来描述字符串的一种方法,你可以说:如果一个字符串包含这些东西,那么它与我要找的东西匹配。例如,要表达一个数可能有也可能没有负号你可以在负号下面跟一个问号:-?
要表示一个整数,你可以描述其具有一位或多位数字。在正则表达式中,一个数位用'\d'表示,但在java的字符串类型中,我们必须添加一个反斜线才能“转义”表达出反斜线:‘\\d’。正则表达式中要说明有一个或多个前述的表达式,就要使用'+'。所以要表达“可能有负号,后面有一个或多个数位”,我们要这样写:-?//d+
      
------解决方案--------------------
感觉你的理解错了吧,java中用正则来匹配的话, 
.
就是匹配任何字符啊!!!
我用下面的测试了
import java.util.regex.*;
public class testzhengze{
public static void main(String[] args){
String str="a.b";
Pattern p=Pattern.compile(".");
Matcher m=p.matcher(str);
while(m.find()){
System.out.println(m.group());
}
}
}

输出就是
可见,
.
匹配了任何字符啊
------解决方案--------------------
java正则中的
\\.
表示
.
这个字符的字面意义,不再表示正则中的任意一个字符了!
测试如下:
import java.util.regex.*;
public class testzhengze{
public static void main(String[] args){
String str="a.b";
Pattern p=Pattern.compile("\\.");
Matcher m=p.matcher(str);
while(m.find()){
System.out.println(m.group());
}
}
}



运行机制可能是这样的,
\\.
在经过编译器(不知道还是JVM编译时),\\转义成了\,所以就变成了
\.
,正则编译时,将\.转义成普通字符 
.
,所以这个不再表示任意一个字符了,只是一个 . 了