文档章节

正则表达式

o
 osc_a22drz29
发布于 2019/03/25 18:06
字数 1242
阅读 0
收藏 0

元字符

元字符 描述
. 匹配除换行符以外的任意字符。
[ ] 字符类,匹配方括号中包含的任意字符。
[^ ] 否定字符类。匹配方括号中不包含的任意字符
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
{n,m} 花括号,匹配前面字符至少 n 次,但是不超过 m 次。
(xyz) 字符组,按照确切的顺序匹配字符xyz。
| 分支结构,匹配符号之前的字符或后面的字符。
\ 转义符,它可以还原元字符原来的含义,允许你匹配保留字符 [ ] ( ) { } . * + ? ^ $  |
^ 匹配行的开始
$ 匹配行的结束

简写字符集

简写 描述
. 匹配除换行符以外的任意字符
\w 匹配所有字母和数字的字符: [a-zA-Z0-9_]
\W 匹配非字母和数字的字符: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]
\s 匹配空格符: [\t\n\f\r\p{Z}]
\S 匹配非空格符: [^\s]

断言

后行断言和先行断言有时候被称为断言,它们是特殊类型的 非捕获组 (用于匹配模式,但不包括在匹配列表中)。当我们在一种特定模式之前或者之后有这种模式时,会优先使用断言。
例如我们想获取输入字符串 $4.44 and $10.88 中 $ 字符之前的所有数字。我们可以使用这个正则表达式 (?<=\$)[0-9\.]*,表示: 获取 $ 字符之前的所有的数字包含 . 字符。
以下是正则表达式中使用的断言:

符号 描述
?= 正向先行断言
?! 负向先行断言
?<= 正向后行断言
?<! 负向后行断言

正向先行断言

正向先行断言认为第一部分的表达式必须是先行断言表达式。返回的匹配结果仅包含与第一部分表达式匹配的文本。
要在一个括号内定义一个正向先行断言,在括号中问号和等号是这样使用的 (?=...)。先行断言表达式写在括号中的等号后面。
例如正则表达式 (T|t)he(?=\sfat),表示: 匹配大写字母 T 或小写字母 t,后面跟字母 h,后跟字母 e
在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配 The 或 the 后面跟着 fat

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

负向先行断言

当我们需要从输入字符串中获取不匹配表达式的内容时,使用负向先行断言。负向先行断言的定义跟我们定义的正向先行断言一样,
唯一的区别是不是等号 =,我们使用否定符号 !,例如 (?!...)
我们来看看下面的正则表达式 (T|t)he(?!\sfat),表示: 从输入字符串中获取全部 The 或者 the 且不匹配 fat 前面加上一个空格字符。

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

正向后行断言

正向后行断言是用于获取在特定模式之前的所有匹配内容。正向后行断言表示为 (?<=...)。例如正则表达式 (?<=(T|t)he\s)(fat|mat),表示: 从输入字符串中获取在单词 The 或 the 之后的所有 fat 和 mat 单词。

"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

负向后行断言

负向后行断言是用于获取不在特定模式之前的所有匹配的内容。负向后行断言表示为 (?<!...)。例如正则表达式 (?<!(T|t)he\s)(cat),表示: 在输入字符中获取所有不在 The 或 the 之后的所有单词 cat

"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

标记

标记 描述
i 不区分大小写: 将匹配设置为不区分大小写。
g 全局搜索: 搜索整个输入字符串中的所有匹配。
m 多行匹配: 会匹配输入字符串每一行。

常用正则表达式

  • 正整数^\d+$
  • 负整数^-\d+$
  • 电话号码^+?[\d\s]{3,}$
  • 电话代码^+?[\d\s]+(?[\d\s]{10,}$
  • 整数^-?\d+$
  • 用户名^[\w\d_.]{4,16}$
  • 字母数字字符^[a-zA-Z0-9]*$
  • 带空格的字母数字字符^[a-zA-Z0-9 ]*$
  • 密码^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$
  • 电子邮件^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$
  • IPv4 地址^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$
  • 小写字母^([a-z])*$
  • 大写字母^([A-Z])*$
  • 网址^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
  • VISA 信用卡号码^(4[0-9]{12}(?:[0-9]{3})?)*$
  • 日期 (MM/DD/YYYY)^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
  • 日期 (YYYY/MM/DD)^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$
  • 万事达信用卡号码^(5[1-5][0-9]{14})*$
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在云函数 SCF 里为 Next.js 跑 SSR

很多时候我们都希望首屏速度快,SEO 友好,那么相比于客户端渲染,SSR 渲染将是这方面的优势。Next.js、Nuxt.js 都是 SSR 框架。本篇文章将介绍 Next.js。 通常我们在部署 SSR 的时候,会担心...

腾讯云Serverless
53分钟前
19
0
一文带你初窥软件测试行业

三大原始问题一——软件测试是什么? 在一定条件下对软件系统进行审核、运行、评估,检验软件系统是否满足规定需求或者找出预期结果与实际结果之间的差别。为软件产品的质量和评价提供依据。...

a伟正是在下
今天
17
0
如何避免APK文件的反向工程? - How to avoid reverse engineering of an APK file?

问题: I am developing a payment processing app for Android, and I want to prevent a hacker from accessing any resources, assets or source code from the APK file. 我正在开发适用......

富含淀粉
今天
13
0
python 抓取 微信公众号文章

1、下载 Fiddler 安装 具体操作传送门 2、第一步已完成,入门开始吧 首先确保有微信客户端(推荐PC,移动端会多一些操作) 启动微信、Fiddler ,然后找到需要抓取的公众号(还是关注一下吧,...

acclea
今天
9
0
JS深拷贝

let arr1 = [1, 2, 3, 4, { name: 'hh'}]/浅克隆****/// 1,展开运算符let arr2 = [...arr1]// 2.splicelet arr3 = arr1.splice(0)/深克隆****/// 1.基...

何祯粮
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部