正则表示式

一、正则表达式 简要介绍

正则表达式 \w \s \d \b
. 匹配除换行符以外的任意字符 
\w 匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'。 
\s 匹配任意的空白符 
\d 匹配数字 
\b 匹配单词的开始或结束 
^ 匹配字符串的开始 
$ 匹配字符串的结束
\w能不能匹配汉字要视你的操作系统和你的应用环境而定
\r  -  回车
\n  -  换行
\b  -  退格
\t  -  制表符
\v  -  垂直制表符
\"  -  双引号
\'  -  单引号


 1、正则表达式的组成
  (1)一般字符:没有特殊意义的字符
   (2)特殊字符(meta字符):元字符,有在正则表达式中的特殊意义
 2、正则表达式中常见的元字符:
     \ : 通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
     . : 用于匹配单个字符(除null外)
    *  : 匹配*前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
    ^  :   匹配紧接着的正则表达式,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\}功能相同

+ : 匹配前面正则表达式的一个或多个扩展(一个或多个)

? : 匹配前面正则表达式的零个或一个扩展(0个或多个)

| : 匹配|符号前或后的正则表达式

( ) : 匹配方括号括起来的正则表达式群

(4). 方括号([])表达式

4.1.字符集  [:  :]

标识字符集,有如下几种:

 4.2.排序符号

指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号

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两字符

二.实例
匹配身份证号码
^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$

如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:

www.baidu.com
http://www.baidu.com
https://www.baidu.com
http://wwwbaiducom
baidu.com
baidu

1.url匹配

匹配以http或者https开头,并且其后为:并且含有.的串

BRE匹配:


ERE匹配:

grep -E '^https?.*\..*' url.txt

匹配结果如下:

http://www.baidu.com
https://www.baidu.com

2.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


正则表达式匹配只有一个大写字母开头的文件
$ find . -name "[A-Z]*" -print

查找文件名是两个小写字母开头然后是两个数字的txt文件
find . -name "[a-z][a-z][0-9][0-9].txt" -print

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天行健自强不息的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值