学习正则表达式四步走:
什么是正则表达式?
为什么要学习正则表达式?
正则表达式的功能?
在java中如何运用正则表达式?
一、概念描述
正则表达式:使用单个字符串来描述、匹配一系列符合某个句法规则的字符串(即字符串模式匹配)。
二、学习原因
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。
大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。
三、功能描述
功能:被用来检索、替换符合某个模式的文本。
(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
(3)用来替换,比普通的替换更强大。
在regex包中,包括了两个类,Pattern(模式类)和Matcher(匹配器类)。
Pattern类是用来表达和陈述所要搜索模式的对象,Matcher类是真正影响搜索的对象。
四、常见Java正则表达式
表达式意义:
1、字符
\\ 反斜线字符。在书写时要写为\\\\。(注意:因为Java在第一次解析时,把\\\\解析成正则表达式\\。在第二次解析时在解析为\.所以\\和带有\的都要写两次)
\0n 带有八进制值 0的字符 n (0 <= n <= 7)
\0nn 带有八进制值 0的字符 nn (0 <= n <= 7)
\0mnn 带有八进制值 0的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 带有十六进制值 0x的字符 hh
\uhhhh 带有十六进制值 0x的字符 hhhh
\b 制表符('u0 0009')
\n 换行符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
2、字符类
[abc]a、b或 c(简单类)。例如[egd]表示包含有字符e、g或d。
[^abc] 任何字符,除了 a、b或 c(否定)。例如[^egd]表示不包含字符e、g或d。
[a-zA-Z] a到 z或 A到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a到 d或 m到 p:[a-dm-p](并集)
[a-z&&[def]] d、e或 f(交集)
[a-z&&[^bc]] a到 z,除了 b和 c:[ad-z](减去)
[a-z&&[^m-p]] a到 z,而非 m到 p:[a-lq-z](减去)
3、预定义字符类(注意反斜杠要写两次)
\d 数字:[0-9]
\D 非数字:[^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
4、数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
五、转
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*$)
六、转载博客《Java正则表达式入门》