正则学习笔记

正则

在这里插入图片描述

正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala 、PHP、C# 、Java、C++ 、Objective-c、Perl 、Swift、VBScript 、Javascript、Ruby 以及Python等等。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
正则转义符

元符号-转义号\\

在使用正则表达式时去检索某些特殊字符的时候需要用到转义符。

正则表达式所支持的合法字符

字符解释
X字符x(x 可代表任何合法的字符)
\0mnn八进制数 0mnn 所表示的字符
\xhh十六进制值 0xhh 所表示的字符
\uhhhh十六进制值 0xhhhh 所表示的 Unicode 字符
\t制表符(“\u0009”)
\n新行(换行)符(‘\u000A’)
\r回车符(‘\u000D’)
\f换页符(‘\u000C’)
\a报警(bell)符(‘\u0007’)
\eEscape 符(‘\u001B’)
\cxx 对应的的控制符。例如,\cM匹配 Ctrl-M。x 值必须为 A~Z 或 a~z 之一。

正则表达式中的特殊字符

特殊字符 说明
$ 匹配一行的结尾。要匹配 $ 字符本身,请使用$
^ 匹配一行的开头。要匹配 ^ 字符本身,请使用^
() 标记子表达式的开始和结束位置。要匹配这些字符,请使用(和)
[] 用于确定中括号表达式的开始和结束位置。要匹配这些字符,请使用[和]
{} 用于标记前面子表达式的出现频度。要匹配这些字符,请使用 {和}
* 指定前面子表达式可以出现零次或多次。要匹配 * 字符本身,请使用*
+ 指定前面子表达式可以出现一次或多次。要匹配 + 字符本身,请使用+
? 指定前面子表达式可以出现零次或一次。要匹配 ?字符本身,请使用?
. 匹配除换行符\n之外的任何单字符。要匹配.字符本身,请使用.
\ 用于转义下一个字符,或指定八进制、十六进制字符。如果需匹配\字符,请用\
| 指定两项之间任选一项。如果要匹配丨字符本身,请使用\

预定义字符

预定义字符说明
.可以匹配任何字符
\d匹配 0~9 的所有数字
\D匹配非数字
\s匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等
\S匹配所有的非空白字符
\w匹配所有的单词字符,包括 0~9 所有数字、26 个英文字母和下画线_
\W匹配所有的非单词字符
\bword \b\b 标注字符的边界(全字匹配)

正向预查

判断条件(?=pattern)正向肯定查看 查询任何匹配pattern处前的一些内容 
判断条件(?!pattern)正向否定查看 查询任何不匹配pattern处前的一些内容

反向预查

(?<=pattern)判断条件 反向肯定查看 查询任何匹配pattern后边的内容
(?<!pattern)判读条件 反向否定查看 查询任何不匹配pattern后边的内容

否定字符类(^)

[^ \n\v\t\:\(\)\%\.\/\-\<\>\_\=] ##排除这些以外的所有字符

举例子

限定符(Quantifier)
a* a出现0次或多次
a+ a出现1次或多次
a? a出现0次或1次
a{6} a出现6次
a{2,6} a 出现2-6次
a{2,} a出现2次以上
或运算符
(a|b) 匹配a或b
(ab)|(cd) 匹配ab或者cd
字符类
[abc] 匹配a或者b或者c
[a-c] 匹配a或者b或者c
[a-zA-Z0-9] 匹配小写大写英文字符以及数字
[^0-9]匹配非数字字符
贪婪/懒惰匹配
<.+>默认贪婪匹配 “任意字符”
<.+?>懒惰匹配 “任意字符”

练习

格式练习

匹配IP地址

\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b

邮箱地址:

\D[a-z]+\@+\D[a-z]+\.

正确格式:example@example.com

错误格式:example@.com, example@example, @example.com

字符串由 6 到 12 个字母和数字组成:

/[a-z0-9]{6,12}

正确格式:abc123, 12345678, abcdefg

错误格式:abc, 1234567890123, abc!123

HTML 文档中的链接:

\w{4,5}+\:+\/\/|(\w+\.){2}+\w{3}
^(https?://)?(www\\.)?[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+(/[^\\s]*)?$
<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1

<a href="http://www.example.com">Example</a>

Example`

日期(YYYY-MM-DD):

\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])

正确格式:2021-01-01, 1990-12-31

错误格式:2021/01/01, 01-01-2021, 2021-13-01

字符串由至少一个大写字母、一个小写字母和一个数字组成:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$

正确格式:Abc123, Xyz456, Abc123xyz

错误格式:abc123, ABCXYZ, 123456

手机号码(XXX-XXXX-XXXX):

^\d{3}-\d{4}-\d{4}$

正确格式:123-4567-8901, 987-6543-2109

错误格式:12345678901, 123-456-7890, 123-4567-89012

字符串由至少一个字母、一个数字和一个特殊字符组成:

^(?=(.*[a-z|A-Z]))(.*\d)(.*[!@#$%^&*])$

正确格式:Abc123!, Xyz456@, Abc123!@#

错误格式:abc123, 123456, ABCXYZ

身份证号码(中国的身份证号码格式):

^(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5])\d{4}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|X)$

正确格式:110101199001011234, 310101199001012345

错误格式:123456789012345678, 11010119900101X123

字符串由至少一个字母和一个数字组成,且长度为 8 到 10 个字符:

`^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{8,10}$`

正确格式:abc12345, xyz987654, abc123xyz

错误格式:abc, 1234567890, abc!123xyz

URL:

^(https?://)?(www\\.)?[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+(/[^\\s]*)?$

正确格式:https://www.example.com, http://www.example.com, www.example.com

错误格式:example.com, http://example, www.example

日志正则分析
August 18th 202311:01:44.007 10.136.132.109 <190>Aug 18 2023 03:01:43+08:00 JLQ-P-POD6-FW-HW-E8000EX16-01-ITC21 %%01INF0/6/LOGFILE_DELETED(s)[13038815]:The log fle cfcard2:/1g/2023-07-23.10-41-48.1og.zipis deleted successfully.

这是一段防火墙日志首先要进行分割

August 18th 2023,11:01:44.007 时间

10.136.132.109 IP

Aug 18 2023 03:01:43+08:00 日志产生时间

JLQ-P-POD6-FW-HW-E8000EX16-01-ITC21 主机名称

%%01INF0/6/LOGFILE_DELETED(s) 事件名称

[13038815] 进程号

:The log fle cfcard2:/1g/2023-07-23.10-41-48.1og.zipis deleted successfully. 内容

时间

^\w{3,9}\s\d{2}\w{2}\s\d{4}\W(\d{2}:){2}\d{2}\.\d{1,}

IP

(\d{1,3}\.){3}\d{1,3}

产生时间

 \w{3}\s\d{2}\s\d{4}\s(\d{2}:){2}\d{2}\+\d{2}:\d{2}

主机名称

\w{1,}-){5}(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{1,}-\d{1,}-(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]{1,}

(?<=\d{2} )\w+(-\w{1,}){7}

事件名称

[^ \n\t\v\[\:]+(?=\[\d{8}\])

进程号

(\[\d{1,}\])

内容

(?<=\[\d{8}\]:)[^\n\t\v]+
(?<=\[\d{8}\]:)[\w\d\s\S]+

例2

August 18th 202310:45:07.783 10.221.74.234 <185>Aug 18 02:45:08 2023 5JLQ-P-PUB-CMNETFW-H3C-M9016-01-ITC11 %%10DIAG/1/CORE_EXCEED_THRESHOLD: -DevIP=10.221.74.234-Chassis=1-Slot=8.1; Usage of CPU1core 18 exceeded the threshold (95%).

August 18th 2023,10:45:07.783

[^\n\t\v]+(?= \d{2}.\d{3}\.)

10.221.74.234

[^ \n\t\v\:]+(?= \<\d{3}\>)

<185>Aug 18 02:45:08 2023

(?<= \<\d{3}\>)[A-Za-z]+\s\d+\s(\d{2}:){2}\d{2}\s\d{4}

5JLQ-P-PUB-CMNETFW-H3C-M9016-01-ITC11

[^ \n\v\t\:\=\.](\w{1,}-){7}\w+

%%10DIAG/1/CORE_EXCEED_THRESHOLD:

[^ \n\v\t]+(?=\: )

-DevIP=10.221.74.234-Chassis=1-Slot=8.1; Usage of CPU1core 18 exceeded the threshold (95%).

(?<=\: )[^\n\v\t]+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值