首页 > 代码库 > Java正则表达式初学

Java正则表达式初学

之前一直觉得正则表达式很NB,几乎各种类型的字符串都能够通过正则来进行匹配,抱着这种心态开始regular expressions的学习。

总的来讲,regular expressions的语法还是比较简单的,总共也没有多少。

下面先列举regular expressions的字符介绍,最后再通过实例加深对regular expressions的理解。

内容参考:http://www.cnblogs.com/elleniou/archive/2012/07/31/2617312.html

正则表达式测试工具:http://tool.chinaz.com/regex/

\

将\之后的字符标记为一个特殊字符。例如"\n"匹配换行符,"\\"匹配"\"。

^

用于匹配字符串的开始位置。

$

用于匹配字符串的结束位置。

*

零次或者多次匹配前面的一个字符或者子表达式。

+

一次或者多次匹配前面的一个字符或者子表达式。

?

零次或者一次匹配前面的一个字符或者子表达式。

{n}

n是非负整数。匹配前面的一个字符或者子表达式n次。

{n,}

n是非负整数。匹配前面的一个字符或者字表达式至少n次。

{n,m}

n和m都是非负整数,其中n<=m。匹配前面的一个字符或者子表达式至少n次,至多m次。

?

当这个字符后面跟随其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式为“非贪心的”,“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。举个例子说明下,在字符串“aaa”中,“a+?”只匹配单个“a”,而“a+”匹配所有的“a”。

.

匹配除了“\n”之外的任何单个字符。假如想匹配包括“\n”在内的任意字符,可使用类似"[\s\S]"之类的正则。

(pattern)

匹配pattern并捕获该匹配的子表达式

(?:pattern)

匹配pattern但不捕获该匹配的子表达式,换句话说,它是一个非捕获匹配,不存储供以后使用的匹配,即匹配的内容不被缓存。

对于用“or”字符(|)组合模式很有帮助。比如,“lov(?:e|ing)”比“love|loving”更经济。

(?=pattern)

执行正向预测先行搜索的子表达式。比如‘windows(?=95|98|NT|2000)’匹配“windows 2000”中的“windows”,但不匹配“windows 3.1”中的“windows”。

(?!pattern)

与(?=pattern)匹配的正好相反。

x|y

匹配x或y

[abc]

字符集。匹配其中包含的任一字符。

[^abc]

反向字符集。匹配未包含的任何字符。

[a-z]

字符范围。

[^a-z]

反向字符范围。

\b

匹配一个字边界。比如“er\b”匹配“never”中的“er”,而不匹配“verb”中的“er”。

\B

与\b相反。

\cx

匹配x指示的控制字符。比如,\cM匹配Control-M或回车符。x的值必须在a-z或者A-Z之间。

\d

数字字符匹配。等效于[0-9]。

\D

非数字字符匹配。

\f

换页符匹配。

\n

换行符匹配。

\r

匹配一个回车符。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。

\S

匹配任何非空白字符。

\t

匹配制表符。

\v

匹配垂直制表符。

\w

匹配任何数字字符,包括下划线。与[A-Za-z0-9]等效。

\W

与\w相反。

\xn

匹配n,此处的n是一个十六进制转义码。十六进制转义码必须是两位数长。例如“\x41”匹配“A”。“\x411”与"\x41"&"1"等效。

\num

匹配num,此处的num是一个正整数。例如“(.)\1”匹配两个连续的相同字符。


实例:

  2 整数或者两位小数:^[0-9]+\.{0,1}[0-9]{0,2}$
  3 只能输入数字:"^[0-9]*$"  4 只能输入n位的数字:"^\d{n}$"  5 只能输入至少n位的数字:"^\d{n,}$"  6 只能输入m~n位的数字:。"^\d{m,n}$"
  7 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"  8 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"  9 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$" 10 只能输入非零的正整数:"^\+?[1-9][0-9]*$" 11 只能输入非零的负整数:"^\-[1-9][]0-9"*$。
 12 只能输入长度为3的字符:"^.{3}$" 13 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$" 14 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$" 15 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$" 16 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$" 17 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$" 18 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
 19 验证是否含有^%&‘,;=?$\"等字符:"[^%&‘,;=?$\x22]+"。
 20 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
 21 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$" 22 验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$" 23 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX" 24 验证身份证号(15位或18位数字):"^\d{15}|\d{18}$" 25 验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12" 26 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31" 27 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
 28 匹配双字节字符(包括汉字在内):[^\x00-\xff]
 29 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
 30 String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
 31 匹配空行的正则表达式:\n[\s| ]*\r
 32 匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
 33 匹配首尾空格的正则表达式:(^\s*)|(\s*$)