Java使用正则表达式——实例

时间:2022-10-23 15:47:44

一、正则表达式的知识要点

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();
五、正则表达式 ==》例子
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>