其他分享
首页 > 其他分享> > 正则表达式

正则表达式

作者:互联网

目录

正则表达式

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

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

在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