预搜索(零宽断言)

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

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

1999李大龙
1998李如花
1997李孝利
1998李雪花
(?<=exp)

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

(?<!exp)

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


而如果 文本是这个样子:

李大龙1999
李如花1998
李孝利1997
李雪花1998
(?=exp)

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

(?!exp)

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


运算符优先级

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

在Java中使用正则表达式时

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

常用正则表达式

校验数字的表达式

数字:^[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_]+$

可以输入含有 ^%&’,;=?$\” 等字符:[^%&',;=?$\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)$

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*?)[^>]*>.*?|< .*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

首尾空白字符的正则表达式:^\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))

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

护照验证正则: /^(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+|1[4,5]\d{7})$/
注:身份号码验证建议查看《关于身份证号码验证的几个实用函数》

钱的输入格式:

有四种钱的表示形式我们可以接受:”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})?$

参考

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

正则表达式之断言及常用正则表达式相关推荐

  1. 正则表达式的用法和常用正则表达式大全(转)

    我们在编写程序时, 无可避免的都需要用到验证各种信息是否正确, 特别是在登录和注册账户时, 需要验证是否符合格式, 然后再传回服务器进行验证 我们先来看一下这个正则表达式如何运用 //邮箱 + (BO ...

  2. 正则表达式简单语法及常用正则表达式

    基本符号: ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示匹配 一次到多次 ( ...

  3. 正则表达式(二)常用正则表达式——验证邮箱

    规则分析 1.开头是数字字母下划线(1到多位) 2.还可以是 -数字字母下划线 或者 .数字字母下划线,整体零到多次 总结=> 邮箱的名字由"数字.字母.下划线.-.."几部 ...

  4. 正则表达式(二)常用正则表达式——验证身份证号码

    规则分析 1. 一共18位 2. 最后一位可能是X 身份证前六位:省市县  130828 中间八位:年月日 最后四位: 倒数第二三四位 => 所在地区顺序码,偶数分配给=>女,技术分配给= ...

  5. 正则表达式基础 和 C#常用正则表达式 [转]

    正则表达式基础知识 原文引用地址: http://fineboy.cnblogs.com/archive/2005/09/08/232410.html 一个正则表达式就是由普通字符(例如字符 a 到 ...

  6. Android 常用正则表达式

    前言 闲扯一下,已经有好久没更新博客了,记得上一篇博客的更新时间为 2017-05-12 15:20.截止到今天,超过一百天没更新了. 这篇博客的内容大多数是从别的博客摘抄过来的,写这篇博客的目的主要 ...

  7. 正则满足中文的顿号_常用的正则表达式、正则表达式之断言

    一.常用的正则表达式: 1.手机号码:/^(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}$/ 2.国内电话号码:/d ...

  8. 前端开发中的 正则表达式 及常用正则表达式大全

    RegExp 是正则表达式(Regular expression)的缩写,就是用一个"字符串"来描述一个特征,然后去验证另一个"字符串"是否符合这个特征.比如 ...

  9. 基础正则表达式及常用正则表达式

    正则表达式 基础正则表达式 字符 表达式 描述 [abc] 字符集.匹配集合中所含的任一字符. [^abc] 否定字符集.匹配任何不在集合中的字符. [a-z] 字符范围.匹配指定范围内的任意字符. ...

  10. js正则表达式验证大全及常用字符的说明

    /判断输入内容是否为空     function IsNull(){         var str = document.getElementById('str').value.trim();    ...

最新文章

  1. System.Timers.Timer的Enable、Start、Stop记录
  2. Spring Security 实战:Spring Boot 下的自动配置
  3. 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据
  4. python在什么系统中开发_Python虚拟开发环境,怎样才能在系统中创建
  5. JZOJ 5700. 【gdoi2018 day1】小学生图论题(graph)
  6. pytorch得到梯度计算结果
  7. react ui框架_Web开发 React 学习(二十)连载基础篇大结局
  8. MySQL--Centos7下安装5.7.19
  9. 安装Lua For Windows
  10. Async和Await如何简化异步编程,几个实例让你彻底明白!
  11. 转自子龙山人 Objective-c的@property 详解
  12. 预测模型构建利器——基于logistic的列线图(R语言)
  13. uniapp实现打印PDF文件
  14. ardruino控制继电器_用 Arduino 实现带继电器的拨动开关
  15. Jquery仿IGoogle实现可拖动窗口
  16. 安装office2010提示错误25541的解决方法
  17. 【Linux 编程】线程绑定 CPU
  18. html页面图片自动缩放比例,html 图片按比例缩放
  19. 05_CSS 盒模型
  20. MapGuide的历史

热门文章

  1. webservice 实例 创建与 调用
  2. 介绍一款免费的词典与文本翻译软件-灵格斯 lingoes
  3. Jsoup使用~抓取豆瓣妹子图
  4. imx6ull设备树
  5. 雨滴式的显示图片 (cloud 转贴) (转)
  6. 记录在WIN10家庭版下安装LR11出现问题
  7. java面试题库精选
  8. 本科计算机专业毕业设计论文写作指南
  9. bochs linux使用教程,bochs 在linux下的安装
  10. MT7628学习笔记(4)——固件烧录(TFTP方式)