正则表达式(二)

上一篇博客我们介绍了正则表达式的前两部分,现在我们来继续介绍后两部分。

3、Class/Range

Class是一组字符或者一个组,用中括号'[]'括起来。Range是放置在Class中的一组特殊的字符。例如我们想要找到所有后面跟着‘e’的从‘A’到‘L’的大写字母,则正则表达式为:

[A-L]e

Range的组成有字母[a-z]或者[A-Z],数字[0-9]。

如果想采用否定的范围,可以使用符号'^',例如想匹配'$'后面没有数字的情况,则正则表达式为:

$[^0-9]

注意符号'^'放在中括号里。

下面我们来做两个例子,所用到的文件grephelp.txt还是在上一篇博客中用到的文件,具体怎么生成请参考那篇文章。

例如我们想在文件中找到有字母'r、s、t、R、S、T'开头的'e',那么我们的命令为:

grep [r-tR-T]e grephelp.txt

结果如下:

可以看出找到的大多数情况都是小写字母‘r、s、t’后面跟着字母‘e’。

数字也可以通过Range进行搜索,如我们在文件中搜索搜索所有的数字,命令如下:
 

grep [0-9] grephelp.txt

结果如下:

我们还可以 设定否定的范围,使用符号'^'。如果我们想找到byte,但是要求byte跟在数字后面,则命令为:

grep [^0-9] byte grephelp.txt

我们还可以非常简单地执行不区分大小写的搜索,例如我们想找到文件中的‘-R’或者‘-r’,则命令如下:

grep \-[rR] grephelp.txt

注意使用转译字符‘\’,因为在这里破折号不是用来传递参数,而是正则表达式的文本。

这里也有一些特殊的字符集:

  • [[:alnum:]] – same as [a-zA-Z0-9]
  • [[:cntrl:]] - same as a Control Character
  • [[:lower:]] - same as [a-z]
  • [[:upper:]] - same as [A-Z]
  • [[:space:]] - whitespace (spaces)
  • [[:blank:]] - whitespace (spaces)
  • [[:alpha:]] - same as [a-zA-Z]
  • [[:digit:]] - same as [0-9]
  • [[print:]] - any printable character
  • [[punct:]] - punctuation characters

例如我们想要列出grep的所有参数,查看文本发现,grep的所有参数都是‘-[a-zA-Z],’,所有参数后面都有一个逗号,所以我们可以用以下命令来搜索:

grep '\-[[:alpha:]],' grephelp.txt

[[:alpha:]]等同于[a-zA-Z]。结果如下:

4、Quantifier 

Quantifier 是一个特殊的字符,作用是用来表示其他的字符。这里有四种基本的Quantifier ,最后一种由三种用法。、:

1、* - 0 or more occurrences

2、+ - 1 or more occurrences

3、? - 0 or 1 occurrence

4、{#} - specific number of occurrences

5、{#,} - a specific number or more of occurrences

6、{#,#} - a range of occurrences from least to maximum

下面我们来看几个例子,加深理解。

如果我们想要搜索’nul‘、’null‘、’nulll‘,则我们的命令如下:

grep 'nu*l' grephelp.txt

星号’*‘表示下一个字符出现0次及以上。如果星号后面结论多个字符,则星号的功能失效。因为星号后面只能接一个字符。请记住星号可以找到0次出现。

如果我们搜索的字符至少出现一次,则我们需要使用加号’+‘。例如我们想要搜索“nul”并且字符“l”至少出现一次,则命令可以是:

grep 'nul\+' grephelp.txt

注意加号“+”必须使用转译字符,并且出现的字符实在前面。

如果我们想搜索“n”后面出现“u”和“l”的所有情况,则命令如下:

grep 'nu\+l\+' grephelp.txt

搜索的结果为“n”后面至少有一个“u”和至少有一个“l”。可能找到的结果有“nul”、“nuul”、“null”等。

文号“?”是搜索只出现0次或者1次的情况。命令:

grep 'nu\?l' grephelp.txt

的搜索结果为“nul”或者“nl”,字母“u”只出现0次或者1次。注意,问号“?”同样需要转译字符。

大括号{}用于指定搜多字符出现的次数,例如我们想找到“null”,则命令如下:

grep -E 'nul{2}' grephelp.txt

这里“l”出现两次,所以匹配的结果只能是“null”。该命令还可以写成:

grep 'null' grephelp.txt

注意命令grep使用大括号是必须使用“-E”参数。

如果我们搜索一个由三个元音组成的字符串,命令为:

grep -E '[aeiou]{3}' grephelp.txt

如果是搜索三个以上元音组成的字符串,命令为:

grep -E '[aeiou]{3,}' grephelp.txt

如果是有三个到8个元音组成的字符串,则命令为:

grep -E '[aeiou]{3,8}' grephelp.txt

由以上的例子我们可以看出,只需要指定出现次数的上下限即可。

正则表达式就谈论完了,希望同学们多多练习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值