java正则表达式的小疑点
阅读
匹配一个任意字符
"\\."
我用其它语言,一般都是
"."
其它语言这句:
"\\."
一般是匹配\加任意字符,例如“\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编译时),\\转义成了\,所以就变成了
\.,正则编译时,将\.转义成普通字符
.,所以这个不再表示任意一个字符了,只是一个 . 了
阅读