加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式常用元字符

发布时间:2020-12-13 22:33:25 所属栏目:百科 来源:网络整理
导读:正则表达式的使用需要借助于工具程序来实现,我们使用grep来演示正则表达式元字符的使用。 grep使用方法 grep是一种文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。 650) this.width=650;" style="border-bott

正则表达式的使用需要借助于工具程序来实现,我们使用grep来演示正则表达式元字符的使用。

grep使用方法

grep是一种文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行。

使用grep在/etc/passwd文件中找到有”roo”关键字的行并显示了出来

grep命令的语法:

grep [OPTIONS] PATTERN [FILE…]

PATTERN:文本字符和正则表达式的元字符组合而成的匹配条件

OPTOINS:此处只列举常用的选项

?color=auto:给关键字加上颜色

可以在全局配置文件/etc/bashrc中定义命令别名grep=”grep ?color=auto”,以使grep命令默认输出颜色

-i:忽略大小写

-v:显示没有被模式匹配的内容

-o:只显示被模式匹配的串本身

-n:显示行号

-A #:显示匹配字符的后面“#”行

显示包含roo字符行的后面一行

-B #:显示匹配字符的前面“#”行

显示包含ROO字符行的前面一行

-C #:显示匹配字符的前后面“#”行

显示包含roo字符的前后各一行

-E:扩展正则表达式

正则表达式:Regular Expression,REGEXP

常用正则表达式分为两种

1. 基本正则表达式(Basic REGEXP)

grep

2.扩展正则表达式(Extended REGEXP)

egrep、grep -E

元字符:不表示其字面意义,而用于额外功能性描述

基本正则表达式的元字符:

字符匹配

. :匹配任意单个字符

r..t:表示以r开头,中间包含两个任意字符并以t结尾的字符串

[ ]:匹配指定范围内的任意单个字符

r[a-z]t:表示以r开头,中间包含一个任意小写字母并以t结尾的字符串

可以使用一些特殊符号还表示特定的值范围

[[:digit:]] :表示数字,相当于[0-9]

[[:lower:]]:表示小写字母,相当于[a-z]

[[:upper:]]:表示大写字母,相当于[A-Z]

[[:space:]]:表示任何会产生空白的字符,如空格键、tab键等

[[:punct:]]:表示标点符号

[[:alpha:]] :表示任何大小写字母,相当于[a-zA-Z]

[[:alnum:]]:表示任何大小写字母和数字,相当于[0-9a-zA-Z]

[^]:匹配指定范围外的任意单个字符

r[^[:lower:]]t:表示以r开头,中间包含一位非小写字母并以t结尾的字符串

次数匹配:用于实现指定其前面的字所能够出现的次数

*:任意长度,前面的字符可以出现任意次

r*t:其中r*表示可以为空字符或一个连续r以上的字符;

如果需要至少两个r以上的字符串时,使用rrr*来表示

同理需要至少三个r以上的字符串时,使用rrrr*来表示

?:匹配其前面的字符一次或0次,它前面的字符是可有可无的,其中为转义字符

rr?t:表示以r开头,中间有一个或者为空字符并且以t结尾的字符串

{m}:m次,它前面的字符要出现m次

r{2}:表示包含两个连续r的字符串

{m,n}:匹配其前面的字符至少m次,至多n次

r{2,4}t:表示包含2至4个连续r,并且以t结尾的字符串

r{5}:表示最小出现5个连续的r并且以t结尾的字符串

{0,n}:最多匹配其前面的字符n次

r{0,5}:表示最多出现5个连续的r并且为t结尾的字符串

注:结果中出现了上面所示的行,是因为没有限定条件不严格造成的,可以定义字符串首部来得到精确结果

.*:任意长度的任意字符

r.*t:表示r与t之间为任意字符(包括空字符)的字符串

位置锚定:用于定义字符位置的元字符

^:锚定行首,此字符后面的任意内容出现在行首。

查找以r开头t结尾的4个字符的字符串开头的行

$:锚定行尾,此字符前面的任意内容出现在行尾

查找以n结尾的行

^$:空白行

&;或b:其后面的任意字符必须作为单词首部出现

包含以op开头的单词的行

&;或b:其前面的任意字符必须作为单词尾部出现

包含以ot结尾的单词的行

可以将两个符号结合使用,精确查找单词

分组:

( ):把内容分组,括号中的字符将被看作是一个整体进行操作

分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

例如:当我们想要查找一个文件中包含至少1个ab的行

新建一个文件eg

引用:

#:引用第#个括号所匹配到的内容,而非模式本身

例如:

新建一个文件eg1,内容如下:

使用分组得到以下结果

下面使用引用来查找对应的行

表达式中的括号是有编号的,从最左边的左括号开始计算,编号从1开始,上面的表达式中有两个左括号,edu前面的为编号1,qa前面的为编号2;而与左括号相对应的右括号则是从里向外就近匹配,上面的表达式中编号为2的表达式为(qa[[:digit:]]),编号为1的表达式为(edc[0-9]{3}(qa[[:digit:]]));

1表示如果在行中有匹配编号为1的表达式的结果,并且在本行再次出现此表达式的结果时,则此行被选中;如上图的查询结果中1号表达式的结果为”edc123qa7“,而后面又出现了一次此字符串,所以该行被选中;2则引用2号表达式的结果进行匹配查找,2号表达式的结果为”qa7″,所以结果中列出了再次出现”qa7″字符串的行。

扩展正则表达式:

字符匹配:与基本正则表达式相同

.:匹配任意单个字符

[ ]:匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

次数匹配:无需转义字符

*:任意长度,前面的字符可以出现任意次

?:匹配前面的字符0或1次

+:至少1次= {1,}

{m}:精确匹配m次

{m,n}:至少m次,至多n次

锚定:与基本正则表达式相同,词首与词尾锚定依然需要转义

分组:与基本正则表达式相同,无需转义

():无需转义

引用:1,2,3 …

或者:

a|b:a或者b

使用扩展正则表达式完成上面的引用查询

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读