java正则表达式语法大全

Posted by alonealice on 2016-10-25

正则表达式是一种专门的语法模式来匹配或找到其他字符串或字符串集,可以用来搜索编辑或是操纵文本和数据。
java中要使用它主要需要用到以下两个类:
Pattern类:一个 Pattern 对象是正则表达式编译表示。 Pattern 类没有提供公共的构造函数。要创建一个 Pattern 对象,你必须首先调用他的公用静态编译方法来获得 Pattern 对象。这些方法的第一个参数是正则表达式。
Matcher类:一个 Matcher 对象是用来解释模式和执行与输入字符串相匹配的操作。和 Pattern 类一样 Matcher 类也是没有构造方法的,你需要通过调用 Pattern 对象的 matcher 方法来获得 Matcher 对象。
这两个类的使用实例:

1
2
3
Pattern pattern=Pattern.compile("^[0-9]+\\.{0,1}[0-9]{0,2}$");
Matcher matcher=pattern.matcher("0.33");
textView.setText(matcher.matches()+"");

返回的结果是true。这里我们可以看到这两个类使用还是挺简单的,关键是正则表达式的语句的书写。那语句应该怎么写呢?
下面是正则表达式所有元字符语法:

子表达式 匹配对应
^ 匹配一行的开头
$ 匹配一行的结尾
. 匹配除了换行符的任何单个字符,也可以利用 m 选项允许它匹配换行符
[…] 匹配括号内的任意单个字符。
[^…] 匹配不在括号内的任意单个字符。
\A 整个字符串的开始
\z 整个字符串的结束
\Z 整个字符串的结束,除了最后一行的结束符
re* 匹配0或者更多的前表达事件
re+ 匹配1个或更多的之前的事件
re? 匹配0或者1件前表达事件
re{ n} 匹配特定的n个前表达事件
re{ n,} 匹配n或者更多的前表达事件
re{ n, m} 匹配至少n最多m件前表达事件
a或b 匹配a或者b
(re) 正则表达式组匹配文本记忆
(?: re) 没有匹配文本记忆的正则表达式组
(?> re) 匹配无回溯的独立的模式
\w 匹配单词字符
\W 匹配非单词字符
\s 匹配空格。等价于 [\t\n\r\f]
\S 匹配非空格
\d 匹配数字. 等价于 [0-9]
\D 匹配非数字
\A 匹配字符串的开始
\Z 匹配字符串的末尾,如果存在新的一行,则匹配新的一行之前
\z 匹配字符串的末尾
\G 匹配上一次匹配结束的地方
\n 返回参考捕获组号“N”

\b 不在括号里时匹配单词边界。在括号里时匹配退格键
\B |匹配非词边界
\n, \t, etc. |匹配换行符,回车符,制表符,等
\Q |引用字符的初始,结束于\E
\E |结束由\Q开始的引用

这么多的字符,你肯定看晕了,也一定记不住。没关系,下面有一些正则表达式的例子,我们就通过实际的例子来加深记忆和理解。
整数或者两位小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 解释:以0-9的数字开始,数字大于等于1个,然后有小数点,点的数量为0-1个,然后0-9的数字0-2个,结束
纯数字:^[0-9]*$ 解释:以0-9数字开始,数字0个以上,结束
n位的数字:^\d{n}$" 解释:数字开始,数字n个,结束
至少n位的数字:^\d{n,}$ 解释:数字开始,数字n个以上,结束
m~n位的数字:^\d{m,n}$ 解释:数字开始,数字m-n位,结束
零和非零开头的数字:^(0|[1-9][0-9]*)$ 解释:0或者以1-9开头,0-9数字0或0以上个 结束
两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 解释:0-9数字一个以上,小数点,0-9数字2个,小数点加数字0或者1个
1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
非零的正整数:^+?[1-9][0-9]*$
非零的负整数:-[1-9][0-9]*$
长度为3的字符:^.{3}$
26个英文字母组成的字符串:^[A-Za-z]+$
26个大写英文字母组成的字符串:^[A-Z]+$
26个小写英文字母组成的字符串:^[a-z]+$
数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
数字、26个英文字母或者下划线组成的字符串:^\w+$ 解释:\w表示数字、字符和下划线
是否含有^%&’,;=?$"等字符:[^%&',;=?$\x22]+
汉字:^[\u4e00-\u9fa5]{0,}$ 解释:0个以上汉字
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 解释:多个字符开头,中间有0-1个[±.],再有多个字符,加@,再加多个字符,中间有0-1个[-.],加多个字符,这样循环多次,加.,再加多个字符,再加0-1个[-.],加多个字符,多次循环
验证http链接:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

根据不同的要求可以有无数种正则表达式,这里不可能一一列举,但是无论怎样,只要弄清楚规则,就都可以写出来。