正则表达式

正则表达式

正则表达式,可以简单理解为快速匹配字符,当然啊它不仅能匹配,还可以利用编程(Python、PHP等语言)函数 删除、修改等操作。

正则表达式不仅仅在网络安全领域很常用,在其他领域也尝尝能见到它的身影,如Python爬虫利用正则表达式来提取标签,PHP利用正则表达式来过滤非法请求等

表示字符

字符 描述
. 匹配任意一个字符
[] 匹配范围里面的字符
\d 匹配0-9数字
\D 匹配非数字
\s 匹配空白字符 空格 tab键
\S 匹配非空白字符
\w 匹配单词字符 a-z A-Z 0-9(包括下划线_)
\W 匹配非单词字符

数量表示

字符 描述
* 匹配前一个字符出现的次数,可以表示无数次 次数 可有可无
+ 匹配前一个字符出现的1次或无数次,至少有一次
? 配前一个字符出现的次数,可有可无
{x} 表示前面的字符出现x次
{x,} 匹配前一个字符最少出现x次
{x,m} 匹配前一个字符出现次数为x到m次

位置表示

字符 描述
^ 表示字符串开头
$ 表示字符串结尾
\b 表示一个单词边界
\B 匹配非单词边界

贪婪模式:

尽可能匹配多的信息

字符 描述
.* 贪婪模式
.*? 取消贪婪

PHP中的 preg_match 函数
Python中的 寻找所有匹配 findall
在我们急于在种众多信息中需找某些特定的信息时候,正则表达式就发挥了很大的作用,简单,方便,快捷的特性就展现出来了


例如

Kali查用户名

比如我们要查找Kali中的所有用户的用户名
可以使用

1
grep -o -E '^\w+(-)?\w+:'  /etc/passwd
  • -o : 只显示匹配字符
  • -E : 使用正则匹配
  • ^\w+ :以单词字符 a-z A-Z 0-9(包括下划线_)开头的最少一次
  • (-)? :有的用户名中间有一个横线 -,?为可有可无
  • \w+: :横线- 后边有的还是会有字符的,最少出现一次,末尾规定了冒号:

手机号

1
1[3-9]\d{9}
1
18112345678
  • 1 代表开头的1
  • [3-9] 匹配第二个数字
  • \d{9} 匹配后边的9个数字
    • \d 匹配数字
    • {9} 表示 \d 匹配的值要出现 9 次

邮箱

1
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
1
abc_123@qq.com

这个正则表达式用于匹配电子邮件地址。下面是对这个正则表达式的详细解释:

  • \w+:匹配一个或多个字母、数字或下划线字符。这部分对应电子邮件地址的用户名部分。

  • ([-+.]\w+)*:这是一个可选的组,匹配零次或多次以下模式。

    • [-+.]:匹配连字符、加号或点号。这些字符可以在电子邮件用户名中出现。
    • \w+:再次匹配一个或多个字母、数字或下划线字符。

    这个组允许用户名中包含这些特殊字符,但这部分是可选的。


  • @:匹配电子邮件地址中的 “**@** ” 符号,这是必需的。

  • \w+:匹配电子邮件地址中的 域名 部分的 第一个单词 ,同样是一个或多个字母、数字或下划线字符。

  • ([-.]\w+)*:这是一个可选的组,匹配零次或多次以下模式。

    • [-.]:匹配连字符或点号。这些字符可以出现在域名中。
    • \w+:匹配一个或多个字母、数字或下划线字符。

    这个组允许域名中包含这些特殊字符,并且可以出现多次,但这部分是可选的。


  • \.:匹配电子邮件地址中的点号 (.),用于分隔域名和顶级域。

  • \w+:匹配电子邮件地址的 顶级域,这是一个或多个字母、数字或下划线字符。

  • ([-.]\w+)*:与前面的 ([-.]\w+)* 相同,但这次它匹配顶级域名中可能出现的额外部分,如 “.co.uk“ 中的 “.uk“。

总的来说,这个正则表达式匹配一个基础的电子邮件地址格式,同时允许在用户名和域名中包含一些特殊字符,并且可以匹配带有多个部分的顶级域名。


正则表达式
https://lzw2004.github.io/2024/05/26/regular/
作者
小志
发布于
2024年5月26日
更新于
2024年5月30日
许可协议