本帖最后由 武汉分校-小舞 于 2016-4-12 10:37 编辑
【武汉校区】分享:Java的正则表达式
学习正则表达式首先要知道正则表达式是干什么用的?正则表达式是专门用于对字符串进行操作的。
例如1:登录QQ的时候,QQ号码有一定的规则,不满足它的规则,不让登录。那么在登录的时候就有一个判断
判断你输入的字符串是否是满足QQ号码的规则
例如2:注册邮箱的时候,你输入的字符串不满足邮箱的规则,就不让你注册。
在注册的时候就要判断你输入的字符串是否满足邮箱的规则。满足规则才让注册,否则不让注册
...像这样的对字符串的操作还有很多
其实正则表达式就是一种规则,这种规则是用字符串表示的。所以正则表达式注意两点
1,本质是是一个字符串
2,它表示一种规则
正则表达式的语法规则
每一种程序语言都有正则表达式,基本语法其实都是一样的,这里讲解的是Java语言的正则表达式。
在Java语言当中,用一些特定的字符组成的字符串,来表示一些特定的规则。具体规则在API Pattern类中有详细说明(这里只提取了一部分简单易懂内容)
下面列举了一些常见的正则表达式匹配规则:
字符
x 字符 x (例如:一个字符'a'就匹配一个字符'a',一个字符'1'就匹配一个字符'1')
\\ 反斜线字符 (用"\\"表示"\")
\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
window换行用 \r\n表示
字符类
[abc] a、b 或 c(简单类)
注意:[abc]只表示匹配1个a,或者1个b,或者1个c
[^abc] 任何字符,除了 a、b 或 c(否定)
注意:[^abc]只表示匹配1个除了a或者b或者c的其他字符
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
注意:[a-zA-Z]只表示匹配一个字母(大写或者小写都可以)
[0-9] 表示匹配所有的数字
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
再回头看一下开头的的那两个需求:
例1:校验字符串是否为QQ号码
首先要知道QQ号码的规则,这个规则可以用正则表达式来表示
规则:
1,首位不能是0
2,只能是数字
3,5到11位数字组成
就可以用一个字符串表示这个规则,那么这个字符串就是正则表达式
String regex="[1-9]//d{4,10}" //[1-9]表示匹配第一个字符是1-9其中的一个,除了第一个字符,//d{4,10}表示数字可以出现4到10次
String qq="87981176";//这个一个QQ号码
boolean b=qq.matches(regex);//用正则表达式匹配这个QQ号码
System.out.println(b);//true,匹配成功返回true
例2:校验字符串是否为邮箱
首先要知道邮箱号码的规则,这个规则可以用正则表达式来表示
规则:huhan@qq.com
从左往右下面几部分组成
1,字母数字或下划线,
一次或多次
2,@符号
一个
3,字母数字或下划线
一次或多次
4,.
一个
5,字母数字或下划线
一次或多次
把上面的规则用正则表达式表示
String regex="\\w+[@]\\w+[\\.]\\w+";//邮箱的正则表达式
String email="huhan@qq.com";
boolean b=emial.matches(regex);
System.out.println(b);//true,匹配成功
对字符串的操作除了匹配,还有切割和替换,以及获取等等
切割
需求:把字符串用数字进行分割
String str="aaaa78bbbb788ccc6600ddd8fff";
//数字的正则表达式,+表示匹配多次
String regex="\\d+";
String[] strs = str.split(regex);
替换
需求:论坛上不允许出现电话号码,将电话号码屏蔽掉用"*"代替
String s="我的电话号码是:13797145678";
//数字的规则可以用[0-9]表示或者//d,把所有的数字,都就替换成*
s.replaceAll("[0-9]","*");
获取
获取功能的步骤:
A:定义一个正则表达式
String regex="[1][0-9]{10}";
B:把正则表达式编译到模式当中
Pattern pattern=Pattern.compile(regex);
C:用模式去匹配需要匹配的字符串
Matcher mather=pattern.matcher("我的手机号码是:13797165578");
D:用Matcher去获取匹配的字符
boolean flag=macther.find(); //去找是否有需要配的下一子序列
if(flag){//如果找到了
String str=macther.group();//获取找到的字符串
System.out.println(str);
}
在实际开发中正则表达式一般都不用自己写,因为要写好一个正则表达式也比较繁琐,并不是那么容易,网上已经有很多整理好的正则表达式可以直接拿过来用。
下面就是整理好的一些正则表达式
=================================================================================================================================================
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*$)
想获取最新传智播客武汉中心分享技术文章请加QQ 1641907557 ,后期会分享更多与实体班同步教程,助你冲击月薪20K!
推荐阅读:
|