正则表达式

一、 什么是正则表达式
       规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和沟通字符一起表示一个模式,这就是正则表达式(Regular Expression)。例如email地址的正则表达式可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-].
      
      正则表达式中的特殊语法:
1、字符类(Character Class):它们在模式中表示一个字符,但是取值范围是一类字符中的任意一个。

2、数量限定符(Quantifier):邮件地址的每一部分可以有一个或多个x字符,IP地址的一部风可以有1-3个y字符。

3、位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系,例如邮件地址分三部分,用普通字符‘@’和‘.’隔开,IP地址分四部分,用‘.’隔开,每一部分都可以用字符类和数量限定符描述。

4、其他一些特殊字符

二、 特点
       正则表达式参数用单引号括起来了,因为正则表达式中用到的很多特殊字符在shell中也有特殊含义(例如\),只有用单引号括起来才能保证这些字符原封不动地传给grep命令,而不会被shell解释掉。
       我们知道C的变量和shell脚本变量的定义和使用方法很不相同,表达能力也不相同,C的变量有各种类型,而shell脚本变量都是字符串。同理,各种工具和编程语言使用的正则表达式规范的语法并不相同,表达能力也各不相同,有点正则表达式规范引入很多扩展,能表达更复杂的模式,但其基本概念都是相通的。

三、使用实例
       位置限定符可以帮grep更准确地查找,例如用[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}来查找IP地址,找到这两行:
192.168.1.1
1234.234.04.5678
如果用上^$,把式子改成:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$,就可以进行精确查找,把1234.234.04.5678这一行过滤掉。

四、 标准正则和扩展正则区别
       正则表达式有Basic和Extended两种规范。以上大部分介绍的是grep正则表达式的Extended规范,egrep相当于grep -E,表示采用Extended正则表达式语法。Basic规范也有这种语法,只是字符‘?+{}()’应解释为普通字符,要表示上述特殊含义则需要加‘\’转义。如果用grep而不是egrep,并且不加-E参数,则应该遵循Basic规范来写正则表达式。

五、 grep 选项和正则表达式结合实例
       grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串。其实正则表达式还有一个重要的应用是验证用户输入是否合法。正则表达式就像“变量”一样,它是一个广泛的概念,而不是某一种工具或编程语言的特性。
       
       示例一:grep - -color -E '^[1-9][0-9]{5,12}@qq.com$'(查找QQ正确的QQ邮箱)
       grep表示行过滤 - -color将查找到的关键词用颜色标示,正则表达式用‘’括起来,保证这些字符原封不动地传给grep命令,而不会被shell解释掉,^$表示精确查找,[1-9]表示第一个字符是1-9 ,[0-9]{5,12}表示后面的字符为0-9,且最少为5个最多为12个,@qq.com代表后面的符合逻辑的字符串。

      示例二:grep - -color -E '^[12][0-9]{0,2}(\.[0-9]{1,3}){3}$'(查找正确的IP地址)

      示例三:grep - -color -E '^[a-zA-Z0-9_]{1,}@163\.com$'(查找正确的网易邮箱)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值