ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java正则表达式·Regular Expression

2019-06-30 16:25:35  阅读:241  来源: 互联网

标签:字符 zo Java Pattern System Regular test 匹配 Expression


正则表达式·Regular Expression

正则表达式就是一个用于匹配字符串的模板,正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
主要用到的对象:
java.util.regex.Pattern:正则表达式经编译后的表现模式
java.util.regex.Matcher:根据Pattern对象做为匹配模式,对字符串展开匹配检查

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test01正则表达式 {
	public static void main(String[] args) {
		// Pattern:正则表达式经编译后的表现模式
		Pattern p = Pattern.compile("((13\\d))\\d{8}");// 匹配13开头手机号(\d:数字)
		// Matcher:根据Pattern对象做为匹配模式,对字符串展开匹配检查。
		Matcher m = p.matcher("13200000001,1500000001,13900000002");
		while (m.find()) {
			System.out.print(m.group());
			System.out.print("	起始位置:" + m.start());
			System.out.println("	结束位置:" + m.end());
		}
	}
}

运行结果:

13200000001	起始位置:0	结束位置:11
13900000002	起始位置:23	结束位置:34

更多语法

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test02各种表达式 {
	public static void main(String[] args) {
		System.out.println("------预定义字符(即通配符)------");
		test匹配("12abAB一二$_*#", ".", ".匹配任何一个字符");
		test匹配("12abAB一二$_*#", "\\d", "(digit)匹配数字0-9");
		test匹配("12abAB一二$_*#", "\\D", "匹配非数字");
		test匹配("12abAB一二$_*#", "\\w", "(word)匹配单词字符,包括0~9,英文字母,下划线");
		test匹配("12abAB一二$_*#", "\\W", "匹配非单词字符");
		test匹配("12[   ]ab\rAB\n一二\t$_*#", "\\s", "(space)匹配空白字符");
		test匹配("12[   ]ab\rAB\n一二\t$_*#", "\\S", "匹配非空白字符");
		System.out.println("------边界匹配符------");
		test匹配("never end", "er\\b", "\\b:匹配一个字边界,即字与空格间的位置");
		test匹配("is a verb", "er\\B", "\\B:匹配非字边界");
		test匹配("This is", "^(This)", "^匹配开头");
		test匹配("The End.", "(End\\.)$", "$匹配结尾(.是预定义字符,需要转义一下)");
		System.out.println("------[中括号用法]------");
		test匹配("andy,bob,cat,dog", "[abc]", "字符集,匹配其中一个字符");
		test匹配("00,01,1a,2c,3e,5f,6g", "[a-f]", "字符范围,匹配指定范围中任何字符");
		test匹配("00,01,1a,2c,3e,5f,6g", "[^a-f]", "反向范围字符,匹配指定范围以外的任何字符");
		test匹配("12abAB一二$_*#", "[\u4E00-\u9FA5]", "匹配中文");
		System.out.println("------AND OR------");
		test匹配("0123456789", "[1-9&&[^8]]", "&&:与,同时满足");
		test匹配("0123456789", "[1-7,9]", "逗号");
		test匹配("food,zood,wood", "(z|f)ood", "|:或");
		System.out.println("------重复------");
		test匹配("z_zo_zoo", "zo+", "一次或多次匹配");
		test匹配("z_zo_zoo", "zo{1,}", "+ 等效于 {1,}");
		test匹配("z_zo_zoo", "zo*", "零次或多次匹配");
		test匹配("z_zo_zoo", "zo{0,}", "* 等效于 {0,}");
		test匹配("z_zo_zoo", "zo?", "零次或一次匹配(多次配上也不管)");
		test匹配("z_zo_zoo", "zo{0,1}", "? 等效于 {0,1}");
	}
	static void test匹配(String s, String sRegex, String msg) {
		// Pattern:正则表达式经编译后的表现模式
		Pattern p = Pattern.compile(sRegex);
		// Matcher:根据Pattern对象做为匹配模式,对字符串展开匹配检查。
		Matcher m = p.matcher(s);
		System.out.print("【" + sRegex + "】" + msg + ":");
		while (m.find()) {
			System.out.print(m.group() + ",");
		}
		System.out.println();
	}
}

运行结果:

------预定义字符(即通配符)------
【.】.匹配任何一个字符:1,2,a,b,A,B,一,二,$,_,*,#,
【\d】(digit)匹配数字0-9:1,2,
【\D】匹配非数字:a,b,A,B,一,二,$,_,*,#,
【\w】(word)匹配单词字符,包括0~9,英文字母,下划线:1,2,a,b,A,B,_,
【\W】匹配非单词字符:一,二,$,*,#,
【\s】(space)匹配空白字符: , , ,
,
,	,
【\S】匹配非空白字符:1,2,[,],a,b,A,B,一,二,$,_,*,#,
------边界匹配符------
【er\b】\b:匹配一个字边界,即字与空格间的位置:er,
【er\B】\B:匹配非字边界:er,
【^(This)】^匹配开头:This,
【(End\.)$】$匹配结尾(.是预定义字符,需要转义一下):End.,
------[中括号用法]------
【[abc]】字符集,匹配其中一个字符:a,b,b,c,a,
【[a-f]】字符范围,匹配指定范围中任何字符:a,c,e,f,
【[^a-f]】反向范围字符,匹配指定范围以外的任何字符:0,0,,,0,1,,,1,,,2,,,3,,,5,,,6,g,
【[一-龥]】匹配中文:一,二,
------AND OR------
【[1-9&&[^8]]】&&:与,同时满足:1,2,3,4,5,6,7,9,
【[1-7,9]】逗号:1,2,3,4,5,6,7,9,
【(z|f)ood】|:或:food,zood,
------重复------
【zo+】一次或多次匹配:zo,zoo,
【zo{1,}】+ 等效于 {1,}:zo,zoo,
【zo*】零次或多次匹配:z,zo,zoo,
【zo{0,}】* 等效于 {0,}:z,zo,zoo,
【zo?】零次或一次匹配(多次配上也不管):z,zo,zo,
【zo{0,1}】? 等效于 {0,1}:z,zo,zo,

常用验证:手机号、身份证号、邮箱

package ahjava.p04util.regular_Exp;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test03常用效验 {
	public static void main(String[] args) {
		String[] sArray = null;
		String sRegEx = null;
		System.out.println("------手机号效验------");
		// 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
		// 联通号码段:130、131、132、136、185、186、145
		// 电信号码段:133、153、180、189
		sArray = new String[] { "13200000001", "15400000002", "13300000003" };
		sRegEx = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$";
		validate(sArray, sRegEx);
		System.out.println("------身份证效验------");
		sArray = new String[] { "42002719991231000X", "42002719991231A", "420027199912313",
				"42002719991231004" };
		sRegEx = "(^\\d{15}$)|(^\\d{17}(\\d|X|x)$)";
		validate(sArray, sRegEx);
		System.out.println("------邮箱效验------");
		sArray = new String[] { "andy@163.com", "bob@qq.com", "cat@hotmail.99" };
		sRegEx = "^\\w+@\\w+.[a-zA-Z]{2,3}(.[a-zA-Z]{2,3})?$";
		validate(sArray, sRegEx);
	}
	static void validate(String[] sArray, String sRegEx) {
		Pattern _pattern = Pattern.compile(sRegEx);
		Matcher matcher = null;
		for (String s : sArray) {
			if (matcher == null) {
				matcher = _pattern.matcher(s);
			} else {
				matcher.reset(s);
			}
			String result = s + (matcher.matches() ? "\t有效" : "\t无效");
			System.out.println(result);
		}
	}
}

运行结果:

------手机号效验------
13200000001	有效
15400000002	无效
13300000003	有效
------身份证效验------
42002719991231000X	有效
42002719991231A	无效
420027199912313	有效
42002719991231004	无效
------邮箱效验------
andy@163.com	有效
bob@qq.com	有效
cat@hotmail.99	无效

标签:字符,zo,Java,Pattern,System,Regular,test,匹配,Expression
来源: https://blog.csdn.net/talkwah/article/details/94330008

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有