聊一聊正则表达式,最全最常用总结

来源:互联网 发布:网络歌曲手机铃声 编辑:程序博客网 时间:2024/06/10 06:15

日常开发文本处理过程中,简单的Ctro+H模式(一对一替换模式)已经不能满足需要了我们需要更为强大的文字处理工具,正则于是应运而生。很多小伙伴不怎么太懂正则。比如我们用到的最多的就是注册的时候我们看到的用户帐号验证,密码的验证、邮箱等等、看看用户所填写的是否合乎规范、但是一般很常用的网上都有大批的资源

正则表达式存在的目的是提高复杂文本分析的效率的,比如说分析html、分析log、分析expression等。分分钟教你学会正则表达式

最近整理了一些常见的正则表达式整理了一下,包括校验数字、字符、一些特殊的需求等等。

一、校验数字的表达式

  • 数字:^[0-9]*$

  • n位的数字:^\d{n}$

  • 至少n位的数字:^\d{n,}$

  • m-n位的数字:^\d{m,n}$

  • 零和非零开头的数字:^(0|[1-9][0-9]*)$

  • 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

  • 带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$

  • 正数、负数、和小数:^(-|+)?\d+(.\d+)?$

  • 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

  • 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

  • 非零的正整数:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$

  • 非零的负整数:^-[1-9][]0-9″$ 或 ^-[1-9]\d$

  • 非负整数:^\d+$ 或 ^[1-9]\d*|0$

  • 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

  • 非负浮点数:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$

  • 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$

  • 正浮点数:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$

  • 负浮点数:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$

  • 浮点数:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$

二、校验字符的表达式

  • 汉字:^[\u4e00-\u9fa5]{0,}$

  • 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

  • 长度为3-20的所有字符:^.{3,20}$

  • 由26个英文字母组成的字符串:^[A-Za-z]+$

  • 由26个大写英文字母组成的字符串:^[A-Z]+$

  • 由26个小写英文字母组成的字符串:^[a-z]+$

  • 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

  • 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

  • 可以输入含有%&’,;=?$\”等字符:[%&',;=?$\x22]+

  • 禁止输入含有的字符:[^\x22]+

三、特殊需求表达式

  • Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$

  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

  • InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$

  • 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

  • 电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX):^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$

  • 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

  • 身份证号(15位、18位数字):^\d{15}|\d{18}$

  • 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

  • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$

  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}

  • 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

四、 钱的输入格式:

有四种钱的表示形式我们可以接受:

  • ”10000.00″

  • “10,000.00″,
    和没有 “分”

  • “10000″

  • “10,000″

  • ^[1-9][0-9]$* : 这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式

  • ^(0|[1-9][0-9]*)$ : 一个0或者一个不以0开头的数字

  • 我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
    这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.

  • 下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10″ 和 “10.2″ 是通过的:^[0-9]+(.[0-9]{2})?$

  • 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    这样就允许用户只写一位小数。

  • 下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})(.[0-9]{1,2})?$
    1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})
    )(.[0-9]{1,2})?$

备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$

  • 中文字符的正则表达式:[\u4e00-\u9fa5]

  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

  • 空白行的正则表达式:\n\s*\r (可以用来删除空白行)

  • HTML标记的正则表达式:<(\S?)[^>]>.?</\1>|<.? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

  • 首尾空白字符的正则表达式:\s*|\s*$或(\s)|(\s$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

  • IP地址:\d+.\d+.\d+.\d+ (提取IP地址时有用)

  • IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

使用方式

public static void main(String[] args) {    // 要验证的字符串    String str = "service@xsoftlab.net";    // 邮箱验证规则    String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";    // 编译正则表达式    Pattern pattern = Pattern.compile(regEx);    // 忽略大小写的写法    // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);    Matcher matcher = pattern.matcher(str);    // 字符串是否与正则表达式相匹配    boolean rs = matcher.matches();    System.out.println(rs);}

总结

正则表达式其实学起来需要花费一些精力和时间的,一旦你自己学会,对开发有很大帮助的。

关于更多

分分钟教你学会正则表达式

2017上半年技术文章集合—184篇文章分类汇总

高级UI特效仿直播点赞效果—一个优美炫酷的点赞动画

一个实现录音和播放的小案例

NDK项目实战—高仿360手机助手之卸载监听

相信自己,没有做不到的,只有想不到的

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 带皮大虾怎么炸酥脆 小皮筋带左手还是右手 男生带小皮筋什么意思 带皮花生怎么煮好吃 吃红薯带皮三大好处 煮梨水带皮还是不带皮好 带皮炸虾做法 带皮和田玉籽料 煮带皮花生米的做法 羊脂玉带皮 带皮废电线多少钱一斤 蜜蜡带皮好吗 抖音里男生手上带小皮筋图片 椒盐核桃带壳的制做过程 西宁哪家盐浴带吹的女人 晒盐 6种人千万不能带个貔貅 带着包孑种种田 农家小寡t妇带着包孑种种田 13种老人不适合带孩子 6种人千万不能带个龙龟 200种实用结绳法带图 农家小寡好带着包种种田txt 6种人千万不能带个金蟾 6种人千万不能带个麒麟 4平方线能带多少瓦 6平方线能带多少千瓦 led一体化带三根线安装图解 1平方线能带多少瓦 10平方线能带多少千瓦 六平方线能带多少瓦 4平方线可以带多大负荷 4平方线能带多少千瓦 1平方线能带多少kw 三相10平方线可以带多大负荷 带线插座 带线 五孔插座 手机上怎么弄带删除线字 大乐基透基本走势图带线 带给带给造句