黑马程序员技术交流社区
标题: 正则表达式的验证? [打印本页]
作者: 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
- String regex = "\\d+(\\.\\d+)?" ;
- 正在使用的时候,正则是: \d+(\.\d+)?
- “\”可以用来转义。因为”.“在正则里面有特殊含义,要真正匹配”.“的时候,就得用 “\."
- 所以(\.\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 |