一、正则表达式的知识要点
1、正则表达式是什么?
正则表达式是一种可以用于模式匹配和替换的强有力的工具。
2、正则表达式的优点?
更少的代码,更高的效率。
3、正则表达式如何使用?
在下面的教程中我们将学习到正则表达式的用法。
二、正则表达式的各种符号及其含义
常用符号
. |
表示任意一个字符 |
\s |
空格字符(空格键, tab, 换行, 换页, 回车) |
\S |
非空格字符([^\s]) |
\d |
一个数字,(相当于[0-9] ) |
\D |
一个数字,(相当于[^0-9] ) |
\w |
一个单词字符(word character) (相当于 [a-zA-Z_0-9] ) |
\W |
一个非单词的字符,[^\w] |
\b |
一个单词的边界 |
\B |
一个非单词的边界 |
\G |
前一个匹配的结束 |
^ |
表达式的开始 |
$ |
表达式的结尾 |
[ ] |
匹配方括号内的一个字符 |
例如:[abc] 表示字符a,b,c中的任意一个(与a|b|c相同) [a-zA-Z] 表示从a到z或A到Z当中的任意一个字符
表示次数的符号
* |
重复零次或更多次 |
|
例如:a* 匹配零个或者多个a |
+ |
重复一次或更多次 |
|
例如:a+ 匹配一个或者多个a |
? |
重复零次或一次 |
|
例如:a? 匹配零个或一个a |
{n} |
重复n次 |
|
例如:a{4} 匹配4个a |
{n,} |
重复n次或更多次 |
|
例如:a{4,} 匹配至少4个a |
{n,m} |
重复n到m次 |
|
例如:a{4,10} 匹配4~10个a |
三、正则表达式实例
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现
1、首先引入java包:java.util.regex
2、使用方法如下:
共分三步:
①构造一个模式. Pattern p=Pattern.compile("[a-z]*");
②建造一个匹配器 Matcher m = p.matcher(str);
③进行判断,得到结果boolean b = m.matches();
Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false
①m.matches() matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
②m.lookingAt() lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
③m.find() find()对字符串进行匹配,匹配到的字符串可以在任何位置
四、实例
①字符匹配
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(str); // 操作的字符串
boolean b = m.matches(); //返回是否匹配的结果
System.out.println(b);
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(str); // 操作的字符串
boolean b = m. lookingAt (); //返回是否匹配的结果
System.out.println(b);
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(str); // 操作的字符串
boolean b = m..find (); //返回是否匹配的结果
System.out.println(b);
②分割字符串
Pattern pattern = Pattern.compile(expression); //正则表达式
String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组
③替换字符串
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(text); // 操作的字符串
String s = m.replaceAll(str); //替换后的字符串
④查找替换指定字符串
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(text); // 操作的字符串
StringBuffer sb = new StringBuffer();
int i = 0;
while (m.find()) {
m.appendReplacement(sb, str); i++; //字符串出现次数 }
m.appendTail(sb);//从截取点将后面的字符串接上
String s = sb.toString();
五、正则表达式 ==》例子
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class shixun7 {
/**
* 验证身份证号、手机号、座机号格式是否正确(可以采用正则表达式验证)
*
* @param args
*/
static Pattern p = null; // 正则表达式
static Matcher m = null; // 操作的字符串
static boolean b = false; // 布尔值
public static void main(String[] args) {
for (int i = 1; i > 0; i++) {
Scanner input = new Scanner(System.in);
System.out.print("请输入身份证:");
String id = input.next();
System.out.print("请输入手机号:");
String sjh = input.next();
System.out.print("请输入座机号:");
String zjh = input.next();
if (yanzhengID(id) && yanzhengsjh(sjh) && yanzhengzjh(zjh)) {
System.out.println("注册成功!");
break;
}
}
}
// 验证座机号
private static boolean yanzhengzjh(String zjh) {
p = Pattern.compile("\\d{4}+-+\\d{7}");
m = p.matcher(zjh);
b = m.matches();
if (b == false) {
System.out.println("座机号区号必须为4位,电话号码必须是七位!");
return false;
}
return true;
}
// 验证手机号
private static boolean yanzhengsjh(String sjh) {
p = Pattern.compile("^[1]+\\d{10}");
m = p.matcher(sjh);
b = m.matches();
if (b == false) {
System.out.println("手机号必须是十一位!");
return false;
}
return true;
}
// 验证身份证
public static boolean yanzhengID(String id) {
p = Pattern.compile("\\d{16}|\\d{18}");
m = p.matcher(id);
b = m.matches();
if (b == false) {
System.out.println("身份证号必须是十六位或十八位!");
return false;
}
return true;
}
}
2.验证Email
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false;
// 正则表达式表示邮箱号码
p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
m = p.matcher("[email protected]");
b = m.matches();
System.out.println("email号码正确:" + b); // 输出:true
//
p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
m = p.matcher("user.test.com");// 错误 @应为.
b = m.matches();
System.out.println("email号码错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}
3.验证是否是中文名
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false;
// 正则表达式表示汉字的一串字符串
p = Pattern.compile("^[\u4e00-\u9fa5]+$");
m = p.matcher("貂禅");
b = m.matches();
System.out.println("中文名正确:" + b); // 输出:true
//正则表达式表示汉字的一串字符串
p = Pattern.compile("^[\u4e00-\u9fa5]+$");
m = p.matcher("nick");// 错误 只能是中文
b = m.matches();
System.out.println("中文名错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}
4.验证IP地址
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 验证IP
* @author caiyu
*
*/
public class Test2 {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false; // 正则表达式表示邮箱号码
p = Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");
m = p.matcher("192.168.1.1");
b = m.matches();
System.out.println("IP正确:" + b); // 输出:true
//
p = Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");
m = p.matcher("192.168.1.1234");// 错误 应该为3位不应该是4位
b = m.matches();
System.out.println("IP错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}
六、感悟
1.通过以上的学习,大家可能对正则表达式有了初步的了解和认识,大家在以后的学习和工作中逐渐加深对Java正则表达式的理解,一定会在编程的过程中起到很大作用
2.使用正则表达式可以减少代码量,可以不用一个一个的去判断字符是否符合。