热门标签 | 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


推荐阅读
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 在我的Web应用中,有一个图层用于展示静态HTML文本。当我使用Ctrl+F搜索页面上的某些文本时,这些文本会被高亮显示。是否有办法让这部分内容不响应搜索操作? ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
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社区 版权所有