什么是正则表达式:
正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的文字。该模式对文本
查找时需要匹配的一个或多个字符串描述,给出一个匹配模板。
为什么要使用正则表达式:
正则表达式可以大大简化文本识别工作,现已超出了某种某种语言或者某个系统的局限,
成为被人们广为使用的工具。
正则 Regex: 对字符串的匹配,判断是否是某种格式
正则表达式也是一段字符串,里面放的是匹配的规则
正则规则:
\d 数字
\D 非数字
\w 数字+英文+下划线
\W 非数字+英文+下划
\s 空格
\S 非空格
正则中的特殊符号
? 0-1次
+ 最少一次
* 任意次
. 任意字符
Java 正则表达式和 Perl 的是最为相似的。
java.util.regex 包主要包括以下三个类:
-
Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
-
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
-
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
1 .整数或者小数:
str="123455";
System.out.println(str.matches("\\d+|\\d+[.]\\d+"));
2. 只能输入数字:
String str1="123455";
System.out.println(str1.matches("\\d+"));
3. 只能输入n位的数字:
String str2="12345";
System.out.println(str2.matches("\\d+{5}"));
4 .只能输入至少n位的数字:
String str3="12345555555";
System.out.println(str3.matches("\\d+{5,}"));
5.只能输入m~n位的数字:
String str4="123455";
System.out.println(str4.matches("\\d+{0,15}"));
6. 只能输入由26个英文字母组成的字符串:
String str5="jkkjd";
System.out.println(str5.matches("\\D+"));
7 .只能输入由26个大写英文字母组成的字符串:
String str6="GJJHJH";
System.out.println(str6.matches("[A-Z]+"));
8 .只能输入由26个小写英文字母组成的字符串:
String str7="hhsh";
System.out.println(str7.matches("[a-z]+"));
9.只能输入由数字和26个英文字母组成的字符串:
String str8="ass545A";
System.out.println(str8.matches("[1-9a-zA-Z]+"));
10.只能输入由数字、26个英文字母或者下划线组成的字符串:
String str9="12hh_";
System.out.println(str9.matches("\\w+"));
11 .验证Email地址:
String str10="www.com";
System.out.println(str10.matches("\\w+[.](com)"));
12 验证InternetURL:www.baidu.com
String str11="www.baidu.com";
System.out.println(str11.matches("\\w+[.]?\\w+[.](com)"));
13. 验证身份证号(15位或18位数字):
String str12="12345522222222222";
System.out.println(str12.matches("\\d+{15,18}"));
14. 验证一年的12个月:
String str13="12";
System.out.println(str13.matches("[1-9]|1[0-2]"));
15. 验证一个月的31天:
String str14="30";
System.out.println(str14.matches("[1-9]|[1-2][0-9]|3[0-1]"));
16 .六位数的密码,数字只能在3-6里选择:
String str15="555555";
System.out.println(str15.matches("[3-6]{6}"));
17. ip地址:192.168.0.1
IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,
每段数字范围为0~255,段与段之间用英文句点“.”隔开。
str="192.168.0.1";
System.out.println(str.matches("1[1-9]\\d[.]1[1-9]\\d[.]\\d[.]\\d"));
18. 例如:某台计算机IP地址为10.11.44.100。
分析IP地址的组成特点:250-255、200-249、0-199。
这三种情况可以分开考虑,
1. 250-255:特点:三位数,百位是2,十位是5,个位是0~5,用正则表达式可以写成:25[0-5]
2. 200-249:特点:三位数,百位是2,十位是0~4,个位是0~9,用正则表达式可以写成:2[0-4]\d
3. 0-199:这个可以继续分拆,这样写起来更加简单明了.
3.1. 0-9: 特点:一位数,个位是0~9,用正则表达式可以写成:\d
3.2. 10-99: 特点:二位数,十位是1~9,个位是0~9,用正则表达式可以写成:[1-9]\d
3.3. 100-199:特点:三位数,百位是1,十位是0~9,个位是0~9,用正则表达式可以写成:1\d{2}
于是0-99的正则表达式可以合写为[1-9]?\d,那么0-199用正则表达式就可以写成(1\d{2})|([1-9]?\d),
这样0~255的正则表达式就可以写成(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
最后,前面3段加上句点.可以使用{3}重复得到,第4段再来一次同样的匹配,得到IP地址的正则表达式:
str="10.11.44.100";
System.out.println(str.matches("[1-9]|1[0][.]1[0-9][.][1-9][1-9][.]1\\d{2}"));