课程大纲
1、认识正则
2、正则表达式
3、Pattern类
4、Matcher类
5、String类对正则的支持
6、示例
1、认识正则
通过一个程序来简单了解一下正则有那些用处:
问题:判断一个字符串是否由数字组成
package com.vinec;
import org.junit.Test;
public class RegexDome {
@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("不是由数字组成的");
}
}
}
2、正则表达式
正则表达式(Regular Expression)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
则表达式通常被用来检索、替换那些符合某个模式的文本
java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher 类
通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
Pattern 类
正则表达式的编译表示形式。
[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](减去)
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
X? X,一次或一次也没有
X X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
(X) X,作为捕获组
非捕获
(?=X) X,通过零宽度的正lookahead
(?!X) X,通过零宽度的负lookahead
(?<=X) X,通过零宽度的正lookbehind
(?<!X) X,通过零宽度的负lookbehind
(?>X) X,作为独立的非捕获组*
3、Pattern类
public final class Pattern extends Objectimplements Serializable
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
典型的调用顺序是
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
4、Matcher类
public final class Matcher extends Object implements MatchResult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用
Matcher类进行验证或者替换。
常用方法:
boolean matches()
尝试将整个区域与模式匹配。
String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。
String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列。
5、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)
根据给定正则表达式的匹配拆分此字符串。
@Test
public void test3(){
String s="520131093";
boolean b=s.matches("[0-9]+");
boolean b1=s.matches("//d");
System.out.println(b+"-"+b1);
}
6、示例
1、验证电话号码(如:010-38389438 )
2、验证手机号码
3、验证用户名,只能是字母开头的数字、字母或下划线的组合
4、验证IP地址(如:192.168.1.1)
5、验证网址(如:http://www.baidu.com)
@Test
public void test4(){
//匹配电话号码
String phone="138295899854";
System.out.println(phone.matches("[1][3-9]\\d{9}"));
//匹配用户名
String name="abcd123";
System.out.println(name.matches("[a-zA-Z]+[\\w|-]*"));
//匹配IP地址
String addr="http://www.baidu.com";
System.out.println(addr.matches("http://\\w+.\\w+.\\s*"));
}
Java中正则表达式与web前端技术JS中的正则大同小异,未来实际开发中,几乎所以数据格式正确性的验证都在前端完成