正则表达式(REGEXP)

基础知识

元字符:含有特定含义的特殊字符。

REGEXP: Regular Expressions,是一种模式。通过使用元字符匹配文件中的字符或者字符串的

通配符: 是用来匹配文件名,不能用来匹配字符串(通配符只能用来匹配现有文件的,不能用来生成文件

正则表达式分类:

  • 基本正则表达式:
  • 扩展正则表达式:
基本正则表达式:需要加转义字符\ grep默认使用的就是基本正则表达式

扩展正则表达式:更简洁,书写的时候可以不加转义字符(\)了 。如:? + {n}等

正则表达式基本元字符:

第一类:字符匹配

  • 点(.)
  • 中括号:[]
点(.)  #单个任意字符(类似于通配符的 ?)

中括号 [] #表示其中的任意一个

    里面匹配出来的是纯小写或大写字符,不像通配符一样有小写有大写

    也支持通配符的写法 #例如表示小写字母: [[: lower :]]

    中括号里面放什么东西就是表示本身的含义 #比如: [.] -- 表示的就是点(.),不表示单个字符的意思

    [^] --- 除括号中指定字符外的任意一个字符

第二类:次数匹配:

描述一个字符出现多少次

  • \
  • 星号(*)
  • \?

  • \

\{num\}  #前一个字符出现num次

    #需要加转移字符(\)

    表示前一个字符出现的次数:\{ num \}

    表示一个区间范围:\{n1,n2\}

*  #前一个字符出现任意次
    #通配符表示的是任意长度的字符

    #贪婪模式: 能匹配的都匹配出来

    #点星(.*):表示任意多个字符

\? #前面字符出现一次或者零次

    #因为通配符的?是一个字符的意思,通配符是shell的,运行的程序又是shell的子进程,所以加个转义字符。过了shell后就变成了? ,然后再给程序使用。

    #懒惰模式: 尽可能少匹配

\+  #前面的字符出现一次以上

第三类:位置锚定

  • 脱字符(^)
  • 美元符($)
^  #脱字符,表示整行的行首(行首锚定)

    行首后面跟个字符串 表示以这个字符串作为开头的行

    写在中括号里面的脱字符表示排除的意思 [^xx]

$  #整行的行尾(行尾锚定)

    #例如:string $ --- 以指定字符结尾的行

    #^str$ ---- 只包含str字符串的行(^$ --- 表示空行)

单词匹配:

linux中 字母、数字、下划算都算单词,其他的就是单词的分界符

#连续的 字母、数字、下划线 才算单词

\< &#x6216; \b  #&#x5355;&#x8BCD;&#x7684;&#x8BCD;&#x9996;

\> &#x6216; \b  #&#x5355;&#x8BCD;&#x7684;&#x8BCD;&#x5C3E;

\< str \>   #&#x6574;&#x4E2A;&#x5355;&#x8BCD;

第四类:分组和其他功能

  • 分组
&#x5206;&#x7EC4;&#xFF1A;&#x4F7F;&#x7528;&#x5C0F;&#x62EC;&#x53F7;&#x62EC;&#x8D77;&#x6765;&#x5F62;&#x6210;&#x4E00;&#x4E2A;&#x6574;&#x4F53;&#xFF0C;&#x540E;&#x9762;&#x9700;&#x8981;&#x8C03;&#x7528;&#x5206;&#x7EC4;&#x7684;&#x65F6;&#x5019;&#x7528;\num #num&#x8868;&#x7684;&#x7B2C;&#x51E0;&#x4E2A;&#x5206;&#x7EC4;
&#x5F62;&#x6210;&#x4E00;&#x4E2A;&#x6574;&#x4F53;&#xFF1A; \(  \)

&#x4F8B;&#x5982;&#xFF1A; abc&#x51FA;&#x73B0;&#x4E09;&#x6B21;  \(abc\)\{3\}

&#x6216;&#xFF1A;| &#xFF1A;&#x4F7F;&#x7528;&#x7684;&#x65F6;&#x5019;&#x8981;&#x52A0;&#x8F6C;&#x4E49;&#x5B57;&#x7B26; \ #&#x5B9E;&#x73B0;&#x4E8C;&#x9009;&#x4E00;&#x7684;&#x6548;&#x679C;

正则表达式扩展元字符:

扩展元字符不使用斜杠进行转义。

[En]

Extended metacharacters are escaped without slashes.

&#x57FA;&#x672C;&#x6B63;&#x5219;&#x8868;&#x8FBE;&#x5F0F;&#x4E0D;&#x52A0;&#x8F6C;&#x4E49;&#x5B57;&#x7B26;&#xFF08;\&#xFF09;&#x3002;&#x6BD4;&#x5982;&#x6B21;&#x6570;&#x5339;&#x914D;&#x7C7B;&#x3001;&#x5355;&#x8BCD;&#x5339;&#x914D;&#x548C;&#x5206;&#x7EC4;&#x7684;&#x5143;&#x5B57;&#x7B26;&#x3002;

&#x4F8B;&#x5982;&#xFF1A;{}&#x3001;&#xFF08;&#xFF09;&#x3001;&#xFF1F;&#x3001;+&#x3001;|&#x3001;<、>&#x3001;b
</、>

支持正则表达式的工具:

grep、sed、awk、vim编辑器

范例:获取IP地址

ifconfig ens33 | grep -i inet | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | head -1

#&#x7B80;&#x5316;&#xFF1A;
ifconfig ens33 | grep -i inet | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}' | head -1

Original: https://www.cnblogs.com/heyongshen/p/16376780.html
Author: 背对背依靠
Title: 正则表达式(REGEXP)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523377/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球