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*$)

长年分享Android、Java基础视频和课程,以及干货!!还有老师给大家免费视频课程!

戳链接:http://jq.qq.com/?_wv=1027&k=hKlAd4

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值