黑马程序员技术交流社区

标题: 正则表达式的验证? [打印本页]

作者: jagon    时间: 2014-3-20 10:11
标题: 正则表达式的验证?
本帖最后由 jagon 于 2014-3-20 10:13 编辑

public class TestDemo {
    public static void main(String[] args) throws Exception {
        String str = "123.1" ;
        String regex = "\\d+(\\.\\d+)?" ;     //谁能帮我解释清楚点,有点迷惑?(括号中的部分)
        if (str.matches(regex)) {   // 符合于验证要求
            double data = Double.parseDouble(str) ; // 字符串变为double型数据
            System.out.println(data * data);
        } else {
            System.out.println("字符串不是数字所组成!");
        }
    }
}

刚开始学正则,感觉有点迷惑,谁帮我解释清楚点,谢谢了!

作者: 小马过河    时间: 2014-3-20 10:31
括号内是组的概念,你看视频,会说到的。
作者: leon_hm    时间: 2014-3-20 11:30
  1. String regex = "\\d+(\\.\\d+)?" ;
  2. 正在使用的时候,正则是: \d+(\.\d+)?
  3. “\”可以用来转义。因为”.“在正则里面有特殊含义,要真正匹配”.“的时候,就得用 “\."
  4. 所以(\.\d+)就是一个”.“后面跟一个或者多个数字。
复制代码

作者: 青木郎    时间: 2014-3-20 14:14
"\\d+(\\.\\d+)?"

根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。
上面结实实在api中找到的  ,有了这个解释就好理解了,

\d                   数字:[0-9]
X+                   X,一次或多次
\\d+就是连续的几个数字,也就是你这道题中的整数部分
\\.因为.代表任意字符,所以要转义
(\\.\\d+)就是表示有一个点后面接一个或者多个数字,并将其放在一个组里
X?                  X,一次或一次也没有
\\d+(\\.\\d+)?
表示有一个或者多个数字,后面有0个或者一个这样的组,这个组里面是有一个。和至少一个数字组成


              




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2