日期:2014-05-18  浏览次数:20633 次

java中的正则表达式感觉有点怪异,不太好理解,请看实际测试
String name="sdfeie sdf 260"+'\r'+'\n'+"[ftp]";
Matcher strMa = Pattern.compile("\\[ftp\\]").matcher(name);
System.out.println(name);

if(strMa.find())
{
        System.out.println(strMa.group());
}

if(name.matches("\\[ftp\\]"))
{
        System.out.println(name);
}


name中的String在控制台输出为:
sdfeie sdf 260
[ftp]

那我想匹配最后一行的[ftp],正则表达式写成"\[ftp\]"觉得也没啥问题,
但是奇怪的我用Sting中的matches方法却不能成功匹配name这个String,而用Pattern和Matcher这种方法就
能匹配上,所以我觉得java中Pattern和Matcher类提供的正则表达式才是规范通用的正则表达式,而java其他类
中的方法参数中可以输入正则表达式的是不是属于java自己的一套正则表达式规则?

------解决方案--------------------
用pattern匹配的就如你想的那样,把匹配的字符串找出来。
而String.match("")匹配的是你当前的字符串是不是跟要匹配的字符串完全匹配,如下一段程序

String name = "123123";
System.out.println(name.matches("\\d"));  //输出false
System.out.println(name.matches("\\d*")); //输出true
name = "12a";
System.out.println(name.matches("\\d*")); //输出false

------解决方案--------------------
楼上说的对。