文档章节

极简 regex 正则表达式速成指南

Upcyan
 Upcyan
发布于 2017/06/09 13:14
字数 902
阅读 24
收藏 0

什么是正则表达式

是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串

  • 咳咳!说人话

用来匹配目标字符串的符号(你有更优雅的描述,欢迎打脸)

  • 谁适合学习正则表达式

不论你从事什么职业,如果你经常要进行文本操作,大量的重复性劳动你觉得很没意思,那么赶快学习正则表达式吧。如果你是并且还不熟悉正则表达式,那么别人会鄙视你。你还在等什么呢?

转义符

  • 如要匹配英文句号点 . 可用转义表示 \.
  • 描述本身 \\

元字符

表达式 说明
. 匹配除换行符以外的任意字符
^ 匹配字符串的开始
$ 匹配字符串的结束
\s 匹配任意的空白符
\d 匹配数字
\w 匹配字母或数字或下划线或汉字
\b 匹配单词的开始或结束

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况

表达式 说明
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\W 匹配任意不是字母,数字,下划线,汉字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符

重复

表达式 说明
* 重复零次或多次
+ 重复一次或多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或多次
{n,m} 重复n到m次

字符类

在方括号中指定一个字符 "范围"。如 [0-9] 等同于 \d

分支条件

分枝条件相当于条件 "或",如果满足其中任意一种规则都应该当成匹配,方法是用 | 把不同的规则分隔开 如: 0\d{2}-\d{8}|0\d{3}-\d{7}

分组

使用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数

  • \d{1,3} 匹配1到3位的数字
  • (\d{1,3}\.){3} 匹配三位数字加上一个英文句号,重复3次

后向引用

后向引用用于重复搜索前面某个分组匹配的文本

表达式 说明
(exp) 匹配 exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配 exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配 exp,不捕获匹配的文本,也不给此分组分配组号
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp>) 匹配前面不是exp的位置
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

? : (

是不是还没懂?让我们来做一些例子吧

  • 以下案例为基础案例,可用于学习

匹配 img 开头 .jpg .png 结尾的字符串(爬取图片时很有用)

"img.*(\.jpg|\.png)"

只匹配汉字

"[\u4e00-\u9fa5]"

长度为8位以上的用户密码(可以是字母数字下划线和.(点))

"[0-9a-zA-Z_\.]{8,}"

匹配电子邮箱

"\w.+@\w.+\.\w+"

匹配手机号

"(13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7}"

匹配身份证号

"\d{17}[0-9Xx]"

匹配时间

"([012]\d):(\d{2}):(\d{2})"

匹配日期

"(\d{4})-([01]\d)-([012]\d)"
  • 未完待续

写的不好,欢迎吐槽 :)

© 著作权归作者所有

Upcyan
粉丝 0
博文 27
码字总数 12134
作品 0
合肥
私信 提问
Markdown 解析器--Snarkdown

Snarkdown 是一个用 JavaScript 编写的极简的 Markdown 解析器。它不是功能最全的,但可能是最容易实现的一款解析器。Snarkdown 只有 1Kb 大小,且只有一种方法,适合速成项目。 特点: 快速...

匿名
2017/03/16
142
0
JavaScript 正则表达式实用指南

简评:字符串操作中正则表达式是一个非常强大的工具,本文梳理了正则表达式中几个实用语法。 什么时候正则表达式 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。他有...

极小光
2018/08/27
0
0
Regex C++: 正则表达式(1)

自C++11起标准库提供了正则表达式库,允许我们使用通配符和pattern来查找和替换掉string中的字符. Match: 将整个string拿来匹配某个regex. Search: 查找某个string中与regex吻合的部分. Rep...

SHIHUAMarryMe
2016/08/03
145
0
正则表达式 (C++) (施工中)

先来看一个例子,要求写一段代码,实现如下功能: 从标准输入中读取一行字符串, 从中读取所有邮箱的格式; 对于这个问题,用传统的方式是可以解决的: 我们可以用解析字符串的方式实现,需要...

shangluyi
2016/12/24
0
0
《Kotin 极简教程》第15章 Kotlin 文件IO操作、正则表达式与多线程

第15章 Kotlin 文件IO操作与多线程 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎...

程序员诗人
2017/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 虚基类

c++ 虚基类 p556

天王盖地虎626
16分钟前
10
0
Java中的面向对象

一、面向对象 面向对象和面向过程的区别 过程就是函数,就是写方法,就是方法的一种实现。 对象就是将函数,属性的一种封装。用人们思考习惯的方式思考问题。 如何自定义类 修饰符 类名{ //成...

zhiruochujian
24分钟前
3
0
k8s删除Terminating状态的命名空间

背景: 我们都知道在k8s中namespace有两种常见的状态,即Active和Terminating状态,其中后者一般会比较少见,只有当对应的命名空间下还存在运行的资源,但是该命名空间被删除时才会出现所谓的...

Andy-xu
27分钟前
20
0
seata源码阅读笔记

seata源码阅读笔记 本文没有seata的使用方法,怎么使用seata可以参考官方示例,详细的很。 本文基于v0.8.0版本,本文没贴代码。 seata中的三个重要部分: TC:事务协调器,维护全局事务和分支...

东都大狼狗
40分钟前
7
0
Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
44分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部