解释:正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些符合某个模式的文本。 java
规则:“^/规则/$”:^([]{})([]{})([]{})$
正则表达式
i.“^“: 若是在开始则:表示从字符串开始匹配,不然表示相反编辑器
ii.”$“: 匹配到字符串结束spa
iii.“/“:两个//中间就是匹配规则code
iv.”\“: 转义字符,将后面的字符表示为其它的含义。regexp
1)特殊字符 ip
2) 将特殊字符转化为字面意义ci
案例:
"\\":表示为 \ 字符
"\n": 表示换行(这是ascii吗里面的特殊字符
"\\n":表示为 \n 字符
v. 字符:字符串
"a":表示字符a
"ab":表示字符 ab
vi.[]和|:表示或,有一个匹配则成立。it
"a|bccd":将匹配accd和bccd
"[ab]ccd": 将匹配accd和bccd
vii.():分组,一组字符串。在正常使用者方便将字符串分割匹配
(规则):获取规则匹配的字符串
(?=规则):匹配其后紧接着的字符串
(?!规则):匹配气候没有紧接着规则的字符串
viii.限定符:表示个数
"{m,n}":表示m到n之间 "{m,}":至少有m个 "{m}":确认m个 "*":0个或多个,等价{0,} "+":一个或多个,等价{1,} "?":0个或1个,等价{0,1}
ix.元字符(特殊字符):
"." 查找单个字符,除了换行和行结束符。 "\w" 查找单词字符。 "\W" 查找非单词字符。 "\d" 查找数字。 "\D" 查找非数字字符。 "\s" 查找空白字符。 "\S" 查找非空白字符。 "\b" 匹配单词边界。 "\B" 匹配非单词边界。 "\0" 查找 NUL 字符。 格式: "\n" 查找换行符。 "\f" 查找换页符。 "\r" 查找回车符。 "\t" 查找制表符。 "\v" 查找垂直制表符。 其它 "\xxx" 查找以八进制数 xxx 规定的字符。 "\xdd" 查找以十六进制数 dd 规定的字符。 "\uxxxx"查找以十六进制数 xxxx 规定的 Unicode 字符
java.util.regex.Pattern: 规则类,构成器私有。
java.util.regex.Matcher: 匹配类,直接出结果。
tips:经常使用的直接是String类的matches(String regular)
@Test public void createRegular() { // create pattern、matcher Pattern pattern = Pattern.compile("b*g"); Matcher matcher = pattern.matcher("bg"); System.out.println(matcher.matches()); // true // 直接封装了pattern和matcher System.out.println(pattern.matches("b*g", "bg")); } @Test public void commonRegular() { /** * @see 表示或的时候都用[] */ System.out.println("abcdefg".matches("a|cbcdefg")); // false System.out.println("abcdefg".matches("abcdef|hg")); // false System.out.println("abcdefg".matches("abcde[f|h]g")); // true } @Test public void specialRegular() { /** * @see java里面专业字符必须用\\,这个转化为/ */ System.out.println("abcdefg".matches("\\w*")); // true // 将()转义为本来含义 System.out.println("a(bcdef)g".matches("a\\([\\w]{5}\\)g")); // true // ()?表示:小括号中的字符串无关紧要 System.out.println("abcdefg".matches("a([\\w]{5})?g")); // true System.out.println("ag".matches("a([\\w]{5})?g")); // true } @Test public void teleRegular() { /** * @see 电话、更加详细的规则须要将其拆分更细 */ System.out.println("18655592458".matches("1[\\d]{10}")); // true System.out.println("18655592458".matches("1[0-9]{10}")); // true System.out.println("1865cc92458".matches("1[\\d]{10}")); // false } @Test public void emailRegular() { /** * @see 邮箱 */ System.out.println("2888asdfa@sina.com".matches("[0-9a-zA-Z]+@([0-9a-zA-Z]+\\.)+[0-9a-zA-Z]+")); // true }