正则表达式

168 阅读3分钟

正则表达式

通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式组成

  • 普通字符
  • 元字符
    image.png

普通字符:包括大小写字母、数字、标点符号及一些其他符号
元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

通配符与正则表达式区别

  • 通配符通常用于查看文件目录,常用的通配符有*、!、?、[ ... ]
  • 正则表达式通常用于匹配文件内容,正则匹配精准度比通配符更高

基础正则表基式常见元字符

支持的工具:grep、egrep、sed、awk

元字符作用示例
\转义字符,用于取消特殊符号的含义\!、\n、\$等
^匹配字符串开始的位置^a、^the、^#、^[a-z]
$匹配字符串结束的位置words、^$匹配空行
.匹配除\n之外的任意的一个字符go.d、g..d
*匹配前面的子表达式0次或者多次goo*d、 go.*d
[list]匹配list列表中的一个字符go[ola]d、[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字
[^list]匹配任意非list列表中的一个字符[^0-9]、[^A-20-9]、[^a-z]匹配任意一位非小写字母
{n}匹配前面的子表达式n次go{2}d、'[0-9]{2}'匹配两位数字
{n,}匹配前面的子表达式不少于n次go{2,}d、'[0-9]{2,}匹配两位及两位以上数字
{n,m}匹配前面的子表达式n到m次go{2,3}d、'[0-9]{2,3}'匹配两位到三位数字
注:egrep、awk使用{n}、 {n,} 、 {n,m}匹配时“ { }"前不用加"\"
\w匹配包括下划线的任何单词字符
\W匹配任何非单词字符等价于"[^A-Za-z0-9_]"
\d匹配一个数字字符
\D匹配一个非数字字符等价于[^0-9]
\s空白符
\S非空白符
  • ^开始的位置 image.png

  • $结束的位置,\转义字符

    • 补充:“!$”表示上次执行的命令最后一个字段 image.png
  • . 匹配除换行之外的任意一个字符 image.png

  • * 匹配前面的子表达式0次或者多次 image.png

    和 . 点结合使用 image.png

  • 匹配列表中的一个字符 image.png

  • 匹配任意非列表中的一个字符 image.png

  • 匹配前面的子表达式 image.png image.png

扩展正则表达式元字符

支持的工具:egrep、awk、grep -E、sed -r

扩展元字符作用示例
+匹配前面的子表达式1次以上go+d,将匹配至少一个o,如god、good、goood等
?匹配前面的子表达式0次或者1次go?d,将匹配gd或god
()将括号中的字符串作为一个整体g(oo)+d,将匹配oo整体1次以上,如good、gooood等
|以或的方式匹配字符串g(oo|la)d,将匹配good或者glad
  • 匹配前面的子表达式1次以上 image.png

  • 匹配前面的子表达式0次或者1次 image.png

  • 将括号中的字符串作为一个整体 image.png

  • 以或的方式匹配字符串 image.png image.png

实例1:匹配电话号码

匹配要求:

  1. 匹配 025 开头的区号。
  2. 电话号码要5 或者 8开头的八位数。
  3. 格式如下:
    • 区号 号码
    • 区号-号码
    • 区号号码
    • 123
  4. 要求全号码格式匹配

操作:

  1. 准备一个包含号码的文档 image.png

  2. 进行匹配 image.png

实例2:匹配电子邮箱

电子邮箱格式:
用户名@子域名.[二级域名].顶级域

要求:

  1. 用户名:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是 _ 或者字母
  2. 子域名.[二级域名]:长度任意,符号只能包含 - _ .
  3. . 顶级域名:长度在2-5,任意大小写英文
  4. 完整匹配

实现各部分:

用户名长度要求在6-18位    {6,18}
除了@符号和空格以外的其它任意符号字符    [^@ ]
开头只能是 _ 或者字母       ^[a-zA-Z_]
长度任意,符号只能包含-_.    [a-zA-Z0-9-_.]+
长度在2-5,任意大小写英文    .[a-zA-Z]{2,5}

操作:

  1. 准备一个包含邮箱的文档 image.png

  2. 进行匹配 image.png