首页 > 程序开发 > 软件开发 > Java >

Java正则表达式初学

2014-07-04

之前一直觉得正则表达式很NB,几乎各种类型的字符串都能够通过正则来进行匹配,抱着这种心态开始regular expressions的学习。 总的来讲,regular expressions的语法还是比较简单的,总共也没有多少。 下面先列

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

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

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

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

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

\

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

^

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

$

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

*

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

+

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

?

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

{n}

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

{n,}

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

{n,m}

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

?

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

.

匹配除了“\n”之外的任何单个字符。假如想匹配包括“\n”在内的任意字符,可使用类&#20284;"[\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的&#20540;必须在a-z或者A-Z之间。

\d

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

\D

非数字字符匹配。

\f

换页符匹配。

\n

换行符匹配。

\r

匹配一个回车符。

\s

匹配任何空白字符,包括空&#26684;、制表符、换页符等等。

\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]&#43;\.{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]&#43;(.[0-9]{2})?$"。
  9 只能输入有1~3位小数的正实数:"^[0-9]&#43;(.[0-9]{1,3})?$"。
 10 只能输入非零的正整数:"^\&#43;?[1-9][0-9]*$"。
 11 只能输入非零的负整数:"^\-[1-9][]0-9"*$。
 12 只能输入长度为3的字符:"^.{3}$"。
 13 只能输入由26个英文字母组成的字符串:"^[A-Za-z]&#43;$"。
 14 只能输入由26个大写英文字母组成的字符串:"^[A-Z]&#43;$"。
 15 只能输入由26个小写英文字母组成的字符串:"^[a-z]&#43;$"。
 16 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]&#43;$"。
 17 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w&#43;$"。
 18 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确&#26684;式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
 19 验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]&#43;"。
 20 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
 21 验证Email地址:"^\w&#43;([-&#43;.]\w&#43;)*@\w&#43;([-.]\w&#43;)*\.\w&#43;([-.]\w&#43;)*$"。
 22 验证InternetURL:"^https://([\w-]&#43;\.)&#43;[\w-]&#43;(/[\w-./?%&=]*)?$"。
 23 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确&#26684;式为:"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])$"正确&#26684;式为:"01"~"09"和"1"~"12"。
 26 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确&#26684;式为;"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 匹配首尾空&#26684;的正则表达式:(^\s*)|(\s*$)



相关文章
最新文章
热点推荐