热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式之断言及常用正则表达式

预搜索(零宽断言)只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的。这个位置应该符合某个条件。判断当前位置的前后字符,是否

预搜索(零宽断言)


  • 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的。
  • 这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。
  • 正则表达式匹配过程中,如果子表达式匹配到的字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。

表达式含义
(?=exp)断言自身出现的位置的后面能匹配表达式exp
(?<&#61;exp)断言自身出现的位置的前面能匹配表达式exp
(?!exp)断言此位置的后面不能匹配表达式exp
(?断言此位置的前面不能匹配表达式exp

举个例子&#xff1a;
现在有以下文本&#xff0c;我们需要找到1998年出生的人:

1999李大龙
1998李如花
1997李孝利
1998李雪花

(?<&#61;exp)

用这个表达式(?<&#61;1998)[\u4e00-\u9fa5]{3}找到1998年出生的人。


(?

用这个表达式(?找到不是1998年出生的人。



而如果 文本是这个样子&#xff1a;

李大龙1999
李如花1998
李孝利1997
李雪花1998

(?&#61;exp)

可以用这个表达式[\u4e00-\u9fa5]{3}(?&#61;1998)找到1998年出生的人。


(?!exp)

可以用这个表达式[\u4e00-\u9fa5]{3}(?!1998)找到不是1998年出生的人。




运算符优先级

正则表达式从左到右进行计算&#xff0c;并遵循优先级顺序&#xff0c;这与算术表达式非常类似。

在这里插入图片描述


在Java中使用正则表达式时

在Java中 正则表达式的\需要变成双杠即\\


常用正则表达式


校验数字的表达式

数字&#xff1a;^[0-9]*$

n位的数字&#xff1a;^\d{n}$

至少n位的数字&#xff1a;^\d{n,}$

m-n位的数字&#xff1a;^\d{m,n}$

零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$

非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9]*)&#43;(.[0-9]{1,2})?$

带1-2位小数的正数或负数&#xff1a;^(\-)?\d&#43;(\.\d{1,2})?$

正数、负数、和小数&#xff1a;^(\-|\&#43;)?\d&#43;(\.\d&#43;)?$

有两位小数的正实数&#xff1a;^[0-9]&#43;(.[0-9]{2})?$

有1~3位小数的正实数&#xff1a;^[0-9]&#43;(.[0-9]{1,3})?$

非零的正整数&#xff1a;^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$^\&#43;?[1-9][0-9]*$

非零的负整数&#xff1a;^\-[1-9][]0-9"*$^-[1-9]\d*$

非负整数&#xff1a;^\d&#43;$^[1-9]\d*|0$

非正整数&#xff1a;^-[1-9]\d*|0$^((-\d&#43;)|(0&#43;))$

非负浮点数&#xff1a;^\d&#43;(\.\d&#43;)?$^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0&#43;|0$

非正浮点数&#xff1a;^((-\d&#43;(\.\d&#43;)?)|(0&#43;(\.0&#43;)?))$^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0&#43;|0$

正浮点数&#xff1a;^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$^(([0-9]&#43;\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]&#43;)|([0-9]*[1-9][0-9]*))$

负浮点数&#xff1a;^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$^(-(([0-9]&#43;\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]&#43;)|([0-9]*[1-9][0-9]*)))$

浮点数&#xff1a;^(-?\d&#43;)(\.\d&#43;)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0&#43;|0)$


校验字符的表达式

汉字&#xff1a;^[\u4e00-\u9fa5]{0,}$

英文和数字&#xff1a;^[A-Za-z0-9]&#43;$^[A-Za-z0-9]{4,40}$

长度为3-20的所有字符&#xff1a;^.{3,20}$

由26个英文字母组成的字符串&#xff1a;^[A-Za-z]&#43;$

由26个大写英文字母组成的字符串&#xff1a;^[A-Z]&#43;$

由26个小写英文字母组成的字符串&#xff1a;^[a-z]&#43;$

由数字和26个英文字母组成的字符串&#xff1a;^[A-Za-z0-9]&#43;$

由数字、26个英文字母或者下划线组成的字符串&#xff1a;^\w&#43;$^\w{3,20}$

中文、英文、数字包括下划线&#xff1a;^[\u4E00-\u9FA5A-Za-z0-9_]&#43;$

可以输入含有 ^%&’,;&#61;?$\” 等字符&#xff1a;[^%&&#39;,;&#61;?$\x22]&#43;

禁止输入含有~的字符&#xff1a;[^~\x22]&#43;


特殊需求表达式

Email地址&#xff1a;^\w&#43;([-&#43;.]\w&#43;)*&#64;\w&#43;([-.]\w&#43;)*\.\w&#43;([-.]\w&#43;)*$

域名&#xff1a;[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})&#43;/.?

InternetURL&#xff1a;[a-zA-z]&#43;://[^\s]* 或 ^http://([\w-]&#43;\.)&#43;[\w-]&#43;(/[\w-./?%&&#61;]*)?$

手机号码&#xff1a;^(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)&#xff1a;^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

国内电话号码(0511-4405222、021-87888822)&#xff1a;\d{3}-\d{8}|\d{4}-\d{7}

身份证号(15位、18位数字)&#xff1a;^\d{15}|\d{18}$

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

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

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

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

日期格式&#xff1a;^\d{4}-\d{1,2}-\d{1,2}

一年的12个月(01&#xff5e;09和1&#xff5e;12)&#xff1a;^(0?[1-9]|1[0-2])$

一个月的31天(01&#xff5e;09和1&#xff5e;31)&#xff1a;^((0?[1-9])|((1|2)[0-9])|30|31)$

xml文件&#xff1a;^([a-zA-Z]&#43;-?)&#43;[a-zA-Z0-9]&#43;\\.[x|X][m|M][l|L]$

中文字符的正则表达式&#xff1a;[\u4e00-\u9fa5]

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

空白行的正则表达式&#xff1a;\n\s*\r(可以用来删除空白行)

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

首尾空白字符的正则表达式&#xff1a;^\s*|\s*$(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)&#xff0c;非常有用的表达式)

腾讯QQ号&#xff1a;[1-9][0-9]{4,} (腾讯QQ号从10000开始)

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

IP地址&#xff1a;\d&#43;\.\d&#43;\.\d&#43;\.\d&#43;(提取IP地址时有用)

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

港澳居民来往内地通行证号码验证正则&#xff1a; /^([A-Z]\d{6,10}(\(\w{1}\))?)$/

护照验证正则&#xff1a; /^(P\d{7}|G\d{7,8}|TH\d{7,8}|S\d{7,8}|A\d{7,8}|L\d{7,8}|\d{9}|D\d&#43;|1[4,5]\d{7})$/
注&#xff1a;身份号码验证建议查看《关于身份证号码验证的几个实用函数》


钱的输入格式&#xff1a;

有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”&#xff1a;^[1-9][0-9]*$

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

一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号&#xff1a;^(0|-?[1-9][0-9]*)$

这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分&#xff1a;^[0-9]&#43;(.[0-9]&#43;)?$

必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的&#xff1a;^[0-9]&#43;(.[0-9]{2})?$

这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样&#xff1a;^[0-9]&#43;(.[0-9]{1,2})?$

这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样&#xff1a;^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

1到3个数字,后面跟着任意个 逗号&#43;3个数字,逗号成为可选,而不是必须&#xff1a;^([0-9]&#43;|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$


参考

https://www.html.cn/archives/7991


推荐阅读
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
author-avatar
手机用户2602922195
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有