正则表达式(Regular Expressiqn)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
则表达式通常被用来检索、替换那些符合某个模式的文本
java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher类
通过解释Pattern对character sequence执行匹配操作的引擎。
Pattern类
正则表达式的编译表示形式。
public final class Pattern extends Objectimplements Serializable
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaab");
boolean b = m.matches();
public final class Matcher extends Object implements MatchResult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用
Matcher类进行验证或者替换。
常用方法:
boolean matches()
尝试将整个区域与模式匹配。
String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。
String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列
在JDK1.4之后加入了正则,随后又更新了String的操作类,因为在使用正则中,所有的内容通过字符串表示的比较多。在String类中有以下的方法可以完成对正则的支持:
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
String replaceAll(String regex, String replacement)
使用给定的replacement替换此字符串
所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement)
使用给定的replacement替换此字符串
匹配给定的正则表达式的第一个子字符串。
String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
常用的正则字符:
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
代码示例:
1、验证电话号码(如: 010-38389438 )
2、验证手机号码
3、验证用户名,只能是字母开头的数字、字母或下划线的组合
4、验证IP地址(如: 192.168.1.1)
5、验证年龄(100以内)
6、验证金额(可以有小数位)
package com.booy;
public class RegexDemo {
public static void main(String[] args) {
//验证电话号码
String phoneNumber = "662-6589905";
boolean p = phoneNumber.matches("\\d{3,4}-\\d{7,8}");
System.out.println(p);
//验证手机号码
String phone = "17602800280";
boolean p1 = phone.matches("1[3-9]\\d{9}");
System.out.println(p1);
//验证用户名,只能是字母开头的数字、字母或下划线的组合,最少6位,最多15位
String user = "e88_ddf";
boolean p2 = user.matches("[a-zA-Z]\\w{5,14}");
System.out.println(p2);
//验证IP地址(如: 192.168.1.1)
String ip = "192.168.1.1";
boolean p3 = ip.matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}");
System.out.println(p3);
//验证年龄
String age = "35";
boolean p4 = age.matches("\\d{1,3}");
System.out.println(p4);
//验证金额(可以有小数位)
String m = "35.88";
boolean p5 = m.matches("\\d+.\\d+");
System.out.println(p5);
}
}