当前位置:网站首页>正则表达式
正则表达式
2022-08-02 20:25:00 【王纯粹】
一.常用的元字符
匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$ 匹配字符串的结束
详解和示例:
(1). 匹配任何任意字符 例如 . 可以匹配 1,n,*,+,- ,等
(2)\d\w\s 匹配第一个字符为数字,第二个字符为字母或数字、或下划线或汉字,第三字符为空格的字符串 例如:11 ,2a , 1_
(3)^\d\d\d$ 匹配三个全部都为数字的字符串 例如: 123,456,789
还可以用于验证输入的字符串是否符合qq(身份证号)的验证 :
例如:^\d{8}$ 匹配8位数字的qq号,^\d{15}&匹配15位均为数字的身份证号
(4)\bOlive\b 匹配单词Olive 例如: I Love Oliver and Olive .这个时候返回的是Olive 而不是Oliver,因为\b…\b返回的匹配的单词
二、反义字符
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
三、限定字符
限定字符多用于重复匹配次数,常用的限定字符如下:
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{
n} 重复n次
{
n,} 重复n次或更多次
{
n,m} 重复n到m次
详解和示例:
(1)\d* 匹配重复0次或多次数字 例如:可能为空 或 任意数字 (2,3。。。。)
(2)\d+ 匹配重复1次或多次数字 例如:可能为1个或多个数字 1,23,234,2345,…
(3)\d? 匹配重复次个或者一次数字 例如:可能为空或者任意的一个数字(1,2,。。。)
(4)\d{
8}匹配重复8次数字 例如:123456768
(5)\d{
4,}匹配重复至少4次数字 例如:1234,12345,124244,。。。。。
(6)^\d{
8,11}$ 匹配重复8-11次数字 例如:12345678,123456789,1234567890,12345678901
四、转义字符
在实际的开发中,可能会遇到要比配元字符的情况,这个时候就需要进行字符转义,如元字符 . * \ 需要转换为. * \;例如: 需要匹配qq邮箱 \d{8,}+qq+.+com 在这里的. 就需要加斜杠。
‘’(单引号)硬转义,其内部所有的shell 元字符、通配符都会被关掉。
“”(双引号)软转义,其内部只允许出现特定的shell 元字符:$用于参数替换 `(反单引号,esc键下面)用于命令替换
\(反斜杠)又叫转义,去除其后紧跟的元字符或通配符的特殊意义
五、字符分组
字符分组多用于将多个字符重复,主要通过使用小括号()来进行分组
形如:(\d\w){
3} 重复匹配3次(\d\w)
常用于表示IP地址 形如: ((25[0-5]|2[0-4][0-9]|[0-1]\d\d).){
3}(25[0-5]|2[0-4][0-9]|[0-1]\d\d)
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
六、字符分枝
字符分枝多用于满足不同情况的选择,用“|”将不同的条件分割开来,比如有些固定电话区号有三位,有些有四位,这个时候可以采用字符分支;例如:\d{3}-\d{8}|\d{4}-\d{8} 可以匹配两种不同长度区号的固定电话。
七、懒惰匹配和贪婪匹配
贪婪匹配:正则表达式中包含重复的限定符时,通常的行为是匹配尽可能多的字符。
懒惰匹配,有时候需要匹配尽可能少的字符。
回溯
当前前面分支/重复匹配成功后,没有多余的文本可被正则后半部分匹配时,会产生回溯
用一个简单的例子来解释一下贪婪匹配和惰性匹配!
贪婪 : /\d+\b/
惰性 : /d+?\b/
文本 : 1234a
贪婪正则匹配 1234a 时的过程是这样的:
\d+ 匹配得到 1234
\b 却匹配失败(\b 是分词边界匹配,用来获取位置,而不是文本,上一节有讲到)
这个时候,\d+会尝试回吐一个字符,即匹配结果为 123 ,可\b还是匹配失败!
那就继续回吐,一直到 1,还是匹配失败,那么这个正则就整体匹配失败了
这个回吐匹配结果的过程就是回溯
惰性正则匹配 1234a 时的过程是这样的:
\d+? 首先匹配,结果是1 ,紧接着 \b 匹配失败
那就 \d+? 继续匹配,结果是 12 ,紧接着 \b 还是匹配失败
\d+? 一直匹配到1234,紧接着的 \b 依然匹配失败
结果整个正则匹配不成功
例如: a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。但是我们此时可能需要匹配的是ab这样的话就需要用到懒惰匹配了。懒惰匹配会匹配尽可能少的字符
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{
n,m}? 重复n到m次,但尽可能少重复
{
n,}? 重复n次以上,但尽可能少重复
八.其他语法
\a 报警字符(打印它的效果是电脑嘀一声)
\b 通常是单词分界位置,但如果在字符类里使用代表退格
\t 制表符,Tab
\r 回车
\v 竖向制表符
\f 换页符
\n 换行符
\e Escape
\0nn ASCII代码中八进制代码为nn的字符
\xnn ASCII代码中十六进制代码为nn的字符
\unnnn Unicode代码中十六进制代码为nnnn的字符
\cN ASCII控制字符。比如\cC代表Ctrl+C
\A 字符串开头(类似^,但不受处理多行选项的影响)
\Z 字符串结尾或行尾(不受处理多行选项的影响)
\z 字符串结尾(类似$,但不受处理多行选项的影响)
\G 当前搜索的开头
LINUX中的正则表达式
正则表达式是用来匹配字符串的,针对文件内容的文本过滤工具里,大都用到正则表达式,如vi,grep,awk,sed等。最常使用的特殊字符如下:
^指向一行的开头
$指向一行的结尾
.任意单个字符
[]字符范围。如[a-z]
边栏推荐
猜你喜欢
The time series database has been developed for 5 years. What problem does it need to solve?

数字孪生助力智慧城市可视化建设

KDD 2022 | 深度图神经网络中的特征过相关:一个新视角

Packages and packages, access modifiers

Flink Yarn Per Job - 创建启动Dispatcher RM JobManager

.NET performance optimization - you should set initial size for collection types

第七章 噪声

The software testing process specification is what?Specific what to do?

Wiring diagrams of switches, motors, circuit breakers, thermocouples, and meters

iframe------------frame-
随机推荐
Golang source code analysis: juju/ratelimit
PyTorch分布式backends
Xcode13.1 run engineering error fatal error: 'IFlyMSC/IFly h' file not found
云平台简介
The time series database has been developed for 5 years. What problem does it need to solve?
Qt提升自定义控件,找不到头文件
Day35 LeetCode
Details in C# you don't know
奥特学园ROS笔记--7(289-325节)
基于“无依赖绝对定位”实现的圣杯三栏布局
框架设计:PC 端单页多页框架如何设计与落地
Packages and packages, access modifiers
V - memo new instructions
交 叉 数 组
汉源高科千兆4光4电工业级网管型智能环网冗余以太网交换机防浪涌防雷导轨式安装
ABAP grammar small review
C# Barrier class
Xcode13.1运行工程报错fatal error: ‘IFlyMSC/IFly.h‘ file not found的问题
顺序查找和折半查找,看这篇就够了
OP analysis and design