一、正则表达式的知识要点
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.matches(); //返回是否匹配的结果
System.out.println(b);
Pattern p = Pattern.compile(expression); // 正则表达式
Matcher m = p.matcher(str); // 操作的字符串
boolean b = m. lookingAt (); //返回是否匹配的结果
System.out.println(b);
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);
boolean b = m..find (); //返回是否匹配的结果
System.out.println(b);
②分割字符串
Pattern pattern = Pattern.compile(expression); //正则表达式
String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组
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); //替换后的字符串
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++; //字符串出现次数 }
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();
五、正则表达式 ==》例子
1.验证身份证号、手机号、座机号格式是否正确
<span style="color:#ff0000;">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; } }</span>
<strong><span style="font-size:32px;">2.验证Email</span></strong>
<pre name="code" class="java"><pre name="code" class="java" style="font-size:32px; color: rgb(255, 0, 0); font-weight: bold;">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("user@test.com"); 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(); } }
<span style="color:#330000;"><strong>3.验证是否是中文名</strong></span>
<pre name="code" class="java" style="font-weight: bold;font-size:32px;"><span style="color:#ff0000;">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(); } }</span>
<span style="font-size:32px;color:#330000;"><strong>4.验证IP地址</strong></span>
<span style="font-size:32px;"><strong></strong></span><pre name="code" class="java"><span style="color:#ff0000;">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(); } }</span>
<span style="color:#660000;">六、感悟</span>
<span style="color:#660000;">1.通过以上的学习,大家可能对正则表达式有了初步的了解和认识,大家在以后的学习和工作中逐渐加深对Java正则表达式的理解,一定会在编程的过程中起到很大作用</span>
<span style="color:#660000;">2.使用正则表达式可以减少代码量,可以不用一个一个的去判断字符是否符合。</span>