1、正则表达式概念
正则表达式(Regular Expression)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
正则表达式通常被用来检索、替换那些符合某个模式的文本。
java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher 类 通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
Pattern 类 正则表达式的编译表示形式。
2、Pattern类
public final class Pattern extends Objectimplements Serializable
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
典型的调用顺序是
Pattern p = Pattern.compile("a*b");Matcher m = p.matcher("aaaaab");boolean b = m.matches();
3、Matcher类
public final class Matcher extends Object implements MatchResult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用 Matcher类进行验证或者替换。
常用方法:
boolean matches() 尝试将整个区域与模式匹配。
String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。
String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。
4、String类对正则的支持
在JDK 1.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) 根据给定正则表达式的匹配拆分此字符串
RegexDemo
package com.vince;import org.junit.Test;import java.util.regex.Matcher;import java.util.regex.Pattern;/***/public class RegexDemo {@Testpublic void test3(){String s = "5201314";boolean b = s.matches("[0-9]+");boolean b1 = s.matches("\\d+");System.out.println(b+"-"+b1);}@Testpublic void test2(){//创建一个匹配模式(模板)Pattern p = Pattern.compile("a*b");Matcher matcher = p.matcher("sb");boolean b = matcher.matches();//匹配System.out.println(b);}/*** 没有使用正则表达式来检查字符串是否由数字组成*/@Testpublic void test1(){String s = "5201314";char[] chars = s.toCharArray();boolean flag = true;for (int i = 0; i < chars.length; i++) {if(chars[i]<'0' || chars[i]>'9'){flag = false;break;}}if(flag){System.out.println("是由数字组成");}else{System.out.println("不是由数字组成");}}}
5、示例
1、验证电话号码(如:010-38389438 )
2、验证手机号码
3、验证用户名,只能是字母开头的数字、字母或下划线的组合
4、验证IP地址(如:192.168.1.1)
5、验证网址(如:http://www.baidu.com)
6、验证年龄(100以内)
7、验证金额(可以有小数位)
package com.vince;import org.junit.Test;/*** 正则表达式示例*/public class RegexDemo2 {@Testpublic void test(){// 匹配电话号码String phoneNumber = "010-38389438";boolean b = phoneNumber.matches("\\d{3,4}-\\d{7,8}");System.out.println(b);// 匹配手机号码String phone = "13895271234";System.out.println(phone.matches("[1][3-9]\\d{9}"));// 匹配用户名:字母开头,数字字母下划线组合String username = "abc1314";System.out.println(username.matches("[a-zA-Z]+[\\w|_]*"));// 匹配IP地址String ip = "20.10.20.123";System.out.println(ip.matches("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}"));// 匹配网址String addr = "http://www.baidu.com";System.out.println(addr.matches("http://\\w+.\\w+.\\S*"));// 匹配年龄String age = "18";System.out.println(age.matches("\\d{1,3}"));// 匹配金额String price = "19.8";System.out.println(price.matches("\\d+.\\d+"));}}
