ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

正则表达式

2021-12-17 14:33:58  阅读:203  来源: 互联网

标签:字符 匹配 正则表达式 test xls 元字符


目录

正则表达式

正则表达式是一些用来匹配和处理文本的字符串。
正则表达式是你所定义的模式模板(pattern template )
正则表达式是通过正则表达式引擎是现实的,正则表达式引擎是一套底层软件,负责解释正则表达式模式并使用这些模式进行匹配

Linux
这里以Linux为例,介绍正则表达式
在Linux中,有两种流行的正则表达式引擎,大多数Linux工具至少实现了BRE引擎规范,能够识别该规范定义的所有模式符号,但是sed只符合BRE引擎规范的子集。

  • POSIX基础正则表达式(basic regular expression)BRE,
  • POSIX扩展正则表达式(extended regular expression)ERE,为常见的模式提供了更高级的使用,如gawk

在linux中可以看到使用awk和gawk的作用是一样的,因为awk是链接到gawk的,gawk是awk的GPL版

gawk程序可以使用大多数扩展正则表达式模式符号,并且能提供一些额外过滤功能,而这些功能是sed不具备的,正因为如此,gawk程序在处理数据流是比较慢。

使用场景

  • 搜索 匹配文本
  • 替换 匹配并替换

注意点
1.正则表达式使用字符串来匹配,匹配到的未必总是整个字符串,也可能是子串。如果需要匹配整个字符,需要用空格将开头或结尾隔开,或者指明行首行尾。

默认设置

1.绝大多数正则表达式引擎默认只返回一个匹配结果
2.区分大小写

匹配纯文本

/文本内容/

echo "thisis isis a test" | awk '/this/{print $0}'
thisis isis a test
echo "thisis isis a test" | sed -n '/this/p'
thisis isis a test

特殊字符

元字符时一些在正则表达式里有特殊含义的字符,如果需要匹配它们本身,需要在前面加斜杠表示转义,比如匹配 * \*

.*[]^${}\+?|()

元字符大致可以分为两类

  • 匹配文本的,比如 .
  • 正则表达式语法的组成部分,比如[和]
特殊字符 描述 说明
. 匹配除了\n之外的任意单个字符 BRE、ERE
[] 必须匹配[]其中的某个字符 BRE 、ERE

[] 匹配多个字符中的某一个

字符|描述
-|-|-
[] |必须匹配[]其中的某个字符
[-] | 表示字符区间(集合),如大写字母[A-Z]
[^] | 取反操作,不匹配[]中的某字符

适用于从全局看需要区分字母大小写,某个局部不需要区分字母大小写。

[]中字符的关系是or

如匹配子串含有RegEx和regex :[Rr]eg[Ee]x
XregEx也会被匹配,原因是默认匹配的不一定是整个字符串,可以是子串,如果需要匹配整个字符串需要限定位置

案例

test文件

sales.txt
order3.txt
na1.xls
na2.xls
sa1.xls
cal.xls
sam.xls
usal.xls

[ns]a..xls
a前面要有n或者s字符,
a后面需要跟一个任意字符
.xls 任意字符的后面要跟着.xls

[ranan@MPI0 ~]$ cat test | sed -n '/[ns]a.\.xls/p'
na1.xls  
na2.xls
sa1.xls
sam.xls
usax.xls  # 这个也被匹配到了,这里涉及之前说的位置匹配

[-]连字符表示字符区间

-只有出现在[-]里的时候才是元字符,在其他地方只是普通字符,表示字符-(它本身)。所以匹配-时是不需要转移的

案例
假设我们的需求是a后面不是跟任意字符了需要跟数字,也就是说不匹配上述的sam.xls
[0-9] 与[0123456789]完全等价

[ranan@MPI0 ~]$ cat test | sed -n '/[ns]a[1-9]\.xls/p'
na1.xls
na2.xls
sa1.xls

常用的字符区间

A-Z 匹配从A到Z的所有大写字母

a-z 匹配从a到z的所有小写字母

A-z 批评日从ASCII字符A到ASCII字符z之间的所有字母,这个模式不常用应为还包含[和^等在ASCII表中排列在Z和a之间的字符

在一个字符集合里可以给出多个字符区间,如果需要匹配任意字符,使用[A-Za-z]

[^] 排除

[^]在[]中表示排除指定的字符

当需要匹配很多的字符,仅仅排除很少的字符时使用

案例
假设我们需要匹配a后面不是数字的字符串

[ranan@MPI0 ~]$ cat test | sed -n '/[ns]a[^1-9]\.xls/p'
sam.xls
usal.xls

. 匹配任意单个字符

匹配除换行符\n之外的任意单个字符,包括本身。
如果指向匹配.,使用\.

空白元字符

空白元字符 说明

标签:字符,匹配,正则表达式,test,xls,元字符
来源: https://www.cnblogs.com/rananie/p/15702173.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有