首页 > 系统 > Linux > 正文

Linux 正则表达式详解

2020-03-22 17:01:17
字体:
来源:转载
供稿:网友
一.linux文本查找命令在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:1.grep : 最早的文本匹配程序,使用POSIX定义的基本html' target='_blank'>正则表达式(BRE)来匹配文本。2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。如下简单的介绍grep命令:语法格式:grep [options ...] pattern-spec [files ...]用途:匹配一个或多个模式的文本行。options:-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。 模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。-f : 从pat-file文件读取模式作为匹配。-i : 模式匹配时忽略大小写差异。-l : 列出匹配模式的文件名称,而不是打印匹配的行。-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。-s : 不显示错误信息,通常与-q并用。-v : 显示不匹配模式的行。说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。可以使用多个-e 或 -f 选项,建立要查找的模式列表。二.正则表达式简要介绍1.正则表达式的组成(1).一般字符:没有特殊意义的字符(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义2.如下讲下正则表达式中的常见meta字符(1).POSIX BRE与ERE中都有的meta字符:/ :通常用于打开或关闭后续字符的特殊含义,如/(.../)与/{.../}. : 匹配任何单个字符(除NUL)* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,(2).POSIX BRE中才有的字符:/{n,m/} : 区间表达式,匹配在它前面的单个字符重现的次数区别。/{n/}指重现n次;/{n,m/}指重现n至m次;/( /) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如/(ab/).*/1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。/n : 重复在/(与/)方括号内第n个子模式至此点的模式。(3).POSIX ERE中才有的字符:{n,m} : 与BRE的/{n,m/}功能相同+ : 匹配前面正则表达式的一个或多个扩展? : 匹配前面正则表达式的零个或一个扩展| : 匹配|符号前或后的正则表达式( ) : 匹配方括号括起来的正则表达式群(4).方括号([])表达式4.1.字符集 [: :]标识字符集,有如下几种:
4.3.等价字符认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。 [[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.3.简单正规表达式匹配案例china : 匹配此行中任意位置有china字符的行^china: 匹配此以china开关的行china$ : 匹配以china结尾的行^china$ : 匹配仅有china五个字符的行[Cc]hina : 匹配含有China或china的行Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符二.实例如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:www.baidu.com
http://www.baidu.com
http://www.baidu.com
http://wwwbaiducom
baidu.com
baidu1.url匹配匹配以http或者https开头,并且其后为:并且含有.的串BRE匹配:grep '^https/{0,1/}.*/..*' url.txtERE匹配:grep -E'^https?.*/..*' url.txt匹配结果如下:http://www.baidu.com
http://www.baidu.com2.Email匹配示例文件内容为:hfutwyy@qq.com
aaaa@
aaa@.com
aaa@gmail.com@@baidu.com匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*/..*' email.txt匹配结果:hfutwyy@qq.com
aaa@.com
aaa@gmail.com先到这里,后续再接着写。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表