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 {
@Test
public void test3(){
String s = "5201314";
boolean b = s.matches("[0-9]+");
boolean b1 = s.matches("\\d+");
System.out.println(b+"-"+b1);
}
@Test
public void test2(){
//创建一个匹配模式(模板)
Pattern p = Pattern.compile("a*b");
Matcher matcher = p.matcher("sb");
boolean b = matcher.matches();//匹配
System.out.println(b);
}
/**
* 没有使用正则表达式来检查字符串是否由数字组成
*/
@Test
public 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 {
@Test
public 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+"));
}
}