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

浅谈正则表达式

发布时间:2020-12-13 23:10:53 所属栏目:百科 来源:网络整理
导读:正则表达式 , 又称正规表示法、常规表示法( 英语 :Regular Expression,在代码中常简写为regex、regexp或RE), 计算机科学 的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的 字符串 。在很多 文本编辑器 里,正则表达式通常被

正则表达式又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrepfgrep。这里仅对grep和egrep做简要示例。


基本格式:

grep [OPTIONS] PATTERN [FILE...]

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

常用命令:


-v: 反向,显示不能被模式所匹配到的行;

wKiom1MNqiTCZOxNAAFAVpwXr4s811.jpg

-o: 仅显示被模式匹配到的字串,而非整行;

wKioL1MNqguScIF4AADjUXHOMBs054.jpg

-i: 不区分字符大小写,ignore-case

wKiom1MNqoizmPoBAACQ6r1bN6Q860.jpg

-A #:之后的几行字符

wKiom1MNqt6Ag1PpAAENky79Tso666.jpg

-B:之前的几行字符

wKioL1MNquPB2XlhAADR71mFFRc963.jpg

-n: 显示匹配行及行号,在显示出内容的每行前面会显示行数

wKioL1MNqzzALTlqAADfNyJvcwg306.jpg


基本格式:

“^” 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
“$”锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
“.”匹配一个非换行符('n')的 字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
“*”匹配零个或多个先前字符 如:' *grep' (注意*前有空格)匹配所有零个或多个空格后紧跟grep的行,需要用egrep 或者grep带上 -E 选项。 .*一起用代表任意字符。“
“[]”匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
“[^]”匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
(..)”标记匹配字符,如'(love)',love被标记为1。
“&;”锚定单词的开始,如:'&;grep'匹配包含以grep开头的单词的行。
“&;”锚定单词的结束,如'grep&;'匹配包含以grep结尾的单词的行。
“x{m}”重复字符x,m次,如:'o{5}'匹配包含5个o的行。
“x{m,”}重复 x,至少m次,如:'o{5,}'匹配至少有5个o的行。

“w”匹配文字和数字字符,也就是[A-Za-z0-9],如:'Gw*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

单词锁定符,如: 'bgrepb'只匹配grep。
用于egrep和 grep -E的元字符扩展集
“+”匹配一个或多个先前的 。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
“?”匹配零个或一个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。
“a|b|c”匹配a或b或c。如:grep|sed匹配grep或sed
“()”分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x{m},x{m,},n}

[[:alnum:]] 匹配任何一个字母或数字([A-Za-z0-9])

[[:alpha:]] 匹配任何一个字母([A-Za-z])

[[:lower:]] 匹配任何一个小写字母([a-z])

[[:upper:]] 匹配任何一个大写字母([A-Z])

[[:space:]] 任何一个空白字符:制表符、空格

[[:punct:]] 任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]字符集)


次数匹配:用来指定匹配其前面的字符的次数

*: 任意次(0次或多次)

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

{m}: 匹配m次

{m,n}:最少匹配m次,最多匹配n次


{0,n}:至多n次;


分组

()

检索文件中包含w字符之以es为组后面接t然后任意字符,组es重复一次的行。


引用:

1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容。(后向引用可以有多次,方法#(#:数字))。



攻城掠地-傲世堂124服

egrep:egrep为grep的拓展形式,功能比grep强大。比如:grep 不支持 a|b (abc|xyz) 这类",但是 egrep 支持. grep 在处理 {n,m} ,需用 { } 处理 egrep 则不需.

注:

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

+: 匹配其前面的字符至少1次

|:表示或关系,比如 'gd|good|dog' 表示有gd,good或dog的串

():将部分内容合成一个单元组。比如要搜索 glad 或 good 可以这样 'g(la|oo)d',()的好处是可以对小组使用 + ? * 等。

例子:

  • - grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对,但 egrep 则可


wKioL1MNr2HT8NlDAACSuZPZ5BQ594.jpg



fgrep

不作 RE 处理,表达式仅作一般字符串处理,所有 meta 均失去功能.

Ps:由于本人此前无linux经验,作为初学者翻阅了大量前人博客,才对正则表达式有了初步概念。

(编辑:李大同)

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

    推荐文章
      热点阅读