正则表达式之断言及常用正则表达式
预搜索(零宽断言)
- 只进行子表达式的匹配,匹配内容不计入最终的匹配结果,是零宽度的。
- 这个位置应该符合某个条件。判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符。是对位置的匹配。
- 正则表达式匹配过程中,如果子表达式匹配到的字符内容,而非位置,并被保存到最终的匹配结果中,那么就认为这个子表达式是占有字符的;如果子表达式匹配的仅仅是位置,或者匹配的内容并不保存到最终的匹配结果中,那么就认为这个子表达式是零宽度的。占有字符还是零宽度,是针对匹配的内容是否保存到最终的匹配结果中而言的。
表达式 | 含义 |
---|---|
(?=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
正则表达式之断言及常用正则表达式相关推荐
- 正则表达式的用法和常用正则表达式大全(转)
我们在编写程序时, 无可避免的都需要用到验证各种信息是否正确, 特别是在登录和注册账户时, 需要验证是否符合格式, 然后再传回服务器进行验证 我们先来看一下这个正则表达式如何运用 //邮箱 + (BO ...
- 正则表达式简单语法及常用正则表达式
基本符号: ^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串) $ 表示匹配字符串的结束位置 * 表示匹配 零次到多次 + 表示匹配 一次到多次 ( ...
- 正则表达式(二)常用正则表达式——验证邮箱
规则分析 1.开头是数字字母下划线(1到多位) 2.还可以是 -数字字母下划线 或者 .数字字母下划线,整体零到多次 总结=> 邮箱的名字由"数字.字母.下划线.-.."几部 ...
- 正则表达式(二)常用正则表达式——验证身份证号码
规则分析 1. 一共18位 2. 最后一位可能是X 身份证前六位:省市县 130828 中间八位:年月日 最后四位: 倒数第二三四位 => 所在地区顺序码,偶数分配给=>女,技术分配给= ...
- 正则表达式基础 和 C#常用正则表达式 [转]
正则表达式基础知识 原文引用地址: http://fineboy.cnblogs.com/archive/2005/09/08/232410.html 一个正则表达式就是由普通字符(例如字符 a 到 ...
- Android 常用正则表达式
前言 闲扯一下,已经有好久没更新博客了,记得上一篇博客的更新时间为 2017-05-12 15:20.截止到今天,超过一百天没更新了. 这篇博客的内容大多数是从别的博客摘抄过来的,写这篇博客的目的主要 ...
- 正则满足中文的顿号_常用的正则表达式、正则表达式之断言
一.常用的正则表达式: 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 ...
- 前端开发中的 正则表达式 及常用正则表达式大全
RegExp 是正则表达式(Regular expression)的缩写,就是用一个"字符串"来描述一个特征,然后去验证另一个"字符串"是否符合这个特征.比如 ...
- 基础正则表达式及常用正则表达式
正则表达式 基础正则表达式 字符 表达式 描述 [abc] 字符集.匹配集合中所含的任一字符. [^abc] 否定字符集.匹配任何不在集合中的字符. [a-z] 字符范围.匹配指定范围内的任意字符. ...
- js正则表达式验证大全及常用字符的说明
/判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); ...
最新文章
- System.Timers.Timer的Enable、Start、Stop记录
- Spring Security 实战:Spring Boot 下的自动配置
- 五大存储模型关系模型、键值存储、文档存储、列式存储、图形数据
- python在什么系统中开发_Python虚拟开发环境,怎样才能在系统中创建
- JZOJ 5700. 【gdoi2018 day1】小学生图论题(graph)
- pytorch得到梯度计算结果
- react ui框架_Web开发 React 学习(二十)连载基础篇大结局
- MySQL--Centos7下安装5.7.19
- 安装Lua For Windows
- Async和Await如何简化异步编程,几个实例让你彻底明白!
- 转自子龙山人 Objective-c的@property 详解
- 预测模型构建利器——基于logistic的列线图(R语言)
- uniapp实现打印PDF文件
- ardruino控制继电器_用 Arduino 实现带继电器的拨动开关
- Jquery仿IGoogle实现可拖动窗口
- 安装office2010提示错误25541的解决方法
- 【Linux 编程】线程绑定 CPU
- html页面图片自动缩放比例,html 图片按比例缩放
- 05_CSS 盒模型
- MapGuide的历史