当前位置:网站首页>正则表达式快速入门笔记
正则表达式快速入门笔记
2022-07-30 10:15:00 【HadesZ~】
0. 基础概念
正则表达式是以字符为单位匹配文本(字符串)的模式(pattern)表达式。正则表达式是区分字母大小写的1,它由普通字符(plain text)和元字符2(metacharacter)构成。
其中,一部分元字符可代表某些特定的普通字符的集合(它们统称为:特殊字符元字符),另一部分是正则表达式语法的组成部分(语法关键字)。
1. 匹配单个字符
可通过一个普通字符、一个字符集或一个(特殊字符)元字符来匹配待查字符串中的某个字符。普通字符仅能匹配与其自身完全相同的字符;字符集3可以匹配与集合中任意一个(普通)字符相同的字符;元字符可以匹配与它所代表的字符集中的任意一个(普通)字符相同的字符。
字符集用一组成对使用的元字符左方括号( [ [ [)和右方括号( ] ] ])来定义,其含义是必须匹配该集合里的字符之一(各个字符之间是 OR 逻辑关系,而不是 AND 关系)。一般来讲,可通过列举出所有可能的普通字符来定义一个字符集,代码如下所示:
# 列举法定义字符集
[Rr]
[ns]
当列举出的普通字符是某个(ASCII码表)字符区间内的连续字符序列时,也可使用元字符 - 以字符区间的方式定义一个字符集,代码如下所示:
# 字符区间法定义字符集
[0-9] # 等效于 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[A-Z] # 等效于 [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
[a-z] # 等效于 [a, b, c, d, e, f, g, h ,i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
在字符集内的开头位置(即在左方括号之后,首个普通字符之前)添加元字符 ^,可表示排除字符集合内指定的字符之外的所有字符组成的集合,相当于给定字符集的非逻辑关系。
常用的代表特定字符集的元字符,如下表所示:
| 元字符 | 说明 |
|---|---|
| .4 | 可以匹配任意字符(包括其本身) |
| [\b] | 退格符(Backspace 键) |
| \f | 换页符 |
| \n | 换行符 |
| \r | 回车符 |
| \t | 制表符(Tab 键) |
| \v | 垂直制表符 |
| \s | 空白字符集,等价于 [\f\n\r\t\v] |
| \S | 非空白字符集,等价于 [^\f\n\r\t\v] |
| \d | 数字字符集,等价于 [0-9] |
| \D | 非数字字符集,等价于 [^0-9] |
| \w | 英文字母及数字字符集,等价于 [a-zA-Z0-9_] |
| \W | 非英文字母及数字字符集,等价于 [^a-zA-Z0-9_] |
| \x | 十六进制数字符集 |
| \05 | 八进制数字符集 |
2. 匹配多个连续字符
按字符出现顺序,依次排列匹配该(单个)字符的普通字符、字符集或元字符,即可匹配多个连续字符。若有连续重复出现的字符,可通过指定匹配该字符的普通字符、字符集或元字符的重复匹配次数(或次数区间)来实现匹配,不用多次重复书写。
普通字符、字符集或元字符的重复匹配次数由量词元字符指定,量词元字符又可分为“贪婪型”(greedy)量词元字符和“懒惰型”(lazy)量词元字符两种。贪婪型(greedy)元字符会尽可能地从一段文本的开头一直匹配到末尾,而不是碰到第一个匹配时就停止。而懒惰型(lazy)元字符正相反,它匹配尽可能少的字符,当遇到第一个匹配时即停止,可有效避免过度匹配。
常用量词元字符如下表所示:
| 型元字符 | 说明 |
|---|---|
| * | 匹配前一个字符(或子表达式)的零次或任意多次重复 |
| + | 匹配前一个字符(或子表达式)的一次或任意多次重复 |
| ? | 匹配前一个字符(或子表达式)的零次或一次重复 |
| {n} | 匹配前一个字符(或子表达式)的 n 次重复 |
| {m, n} | 匹配前一个字符(或子表达式)的至少 m 次且至多 n 次重复 |
| {n, } | 匹配前一个字符(或子表达式)的至少 n 次重复 |
| *? | * 的懒惰型版本 |
| +? | + 的懒惰型版本 |
| {n, }? | {n, } 的懒惰型版本 |
3. 匹配特定位置的单/多个字符
位置元字符可指定匹配字符在待查字符串中出现的位置,如字符串中某一单词的开头/结尾,或待查字符串的开头或结尾等位置。常见的位置元字符如下表所示:
| 元字符 | 说明 |
|---|---|
| \b | 匹配单词的边界(开头和结尾)6,如:匹配以 cat 开头的单词:\bcat;匹配以 cat 结尾的单词:cat\b;匹配一个完整的单词7:\bcat\b |
| \B | \b 的反义,即匹配单词的内部(非开头和结尾的字符) |
| ^ | 匹配字符串的开头,需写在正则表达式语句的开头第一个字符位置 |
| $ | 匹配字符串的结尾,需写在正则表达式语句的结尾最后一个字符位置 |
4. 其他常用功能
其他常用的元字符还有:
- 元字符 \ :转义字符
- 元字符 | :或逻辑
- 元字符对左右圆括号 () :子表达式
边栏推荐
- 系统设计精选 | 基于FPGA的CAN总线控制器的设计(附代码)
- Multithreading--the usage of threads and thread pools
- 梅科尔工作室-看鸿蒙设备开发实战笔记六—无线联网开发
- [Deep Learning] (Problem Record)
- Linear Regression - Small Batch Stochastic Gradient Descent - 软考 系统架构设计师 简明教程 | 案例分析 | 需求分析
- MFCC转音频,效果不要太逗>V<!
- [100 Solidity Skills] 1. Contract reentrancy attack
- Neural Network Study Notes 4 - Autoencoder (including sparse, stacked) (updated)
- Study Notes 10--Main Methods of Local Trajectory Generation
- 这种叫什么手法
猜你喜欢

PyQt5 - draw sine curve with pixels

Re21:读论文 MSJudge Legal Judgment Prediction with Multi-Stage Case Representation Learning in the Real

Understanding of deadlock

Alibaba Cloud OSS Object Storage

BERT pre-training model series summary

Re20:读论文的先例:普通法的信息理论分析

【云原生】-Docker安装部署分布式数据库 OceanBase

Re21: Read the paper MSJudge Legal Judgment Prediction with Multi-Stage Case Representation Learning in the Real

Domino Server SSL Certificate Installation Guide

Re19:读论文 Paragraph-level Rationale Extraction through Regularization: A case study on European Court
随机推荐
Neural Network Study Notes 3 - LSTM Long Short-Term Memory Network
Pytorch中 nn.Transformer的使用详解与Transformer的黑盒讲解
spark udf 接受并处理 null值.
线程池方式开启线程--submit()和execute()的区别
Re20:读论文 What About the Precedent: An Information-Theoretic Analysis of Common Law
Do you really understand the 5 basic data structures of Redis?
Mysterious APT Attack
flowable workflow all business concepts
张量篇-初步
The thread pool method opens the thread -- the difference between submit() and execute()
jmeter接口压力测试-(二)
Selected System Design | Design of CAN Bus Controller Based on FPGA (with Code)
Multi-threading scheme to ensure that a single thread opens a transaction and takes effect
【云原生】-Docker安装部署分布式数据库 OceanBase
JVM内存布局、类加载机制及垃圾回收机制详解
【C和指针第七章】可变参数列表
系统设计精选 | 基于FPGA的CAN总线控制器的设计(附代码)
安全提示:Qt中的FreeType
ospf2 two-point two-way republish (question 2)
js对数组操作移动进行封装