强大的Perl正则表达式实例详解

2019-10-01 10:10:33王振洲

一、介绍

正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配;由于Nmap内嵌的服务与版本探测是使用的Perl正则规范,因此此篇博客记录一下Perl正则的相关内容,方便后期查阅。

二、Perl正则例子

下面的例子可能有不足之处,有些来源于博客,没有验证;

1. 匹配IP地址:d+.d+.d+.d+

               d:匹配一个数字字符,d+:匹配一次或多次数字字符。

               .:使用转义字符匹配'.'。

2. 匹配邮箱类似于123456@qq.com: /^[a-zA-Z0-9_-.]+@[a-zA-Z0-9_-]+.[a-zA-Z]+$/

        ^: 匹配开头

        $: 匹配结尾,这两个保证了这是连续的一串字符。

3. 匹配数字:m/^[0-9]+$/

       由^开头由$结尾保证了只含有数字,如果只有结尾$,那么abc12这种也是可以的。

       可用在输入校验,校验输入的是否是数字。

4. 用户输入温度(华氏温度,摄氏温度),编程进行转换

    m/^([-+]?[0-9]+)([CF])$/ :匹配正负整数温度。

        [CF]: 匹配中括号其中的一个

        ?:匹配前面的子表达式0次或1次

        +:匹配前面的子表达式一次或多次

        perl通过临时变量$1,$2保存子表达式匹配的文本。$1保存的是数字,$2保存的是符号。

    m/^([-+]?[0-9]+(?:.[0-9]*)?)s*([CF])$/i) :添加支持小数的温度匹配

        临时变量保存的顺序与分组的开括号 ( 在表达式中的顺序有关(从左到右);因此这个地方使用?:,代表该括号匹配的值不被临时变量保存。

        /i: 代表忽略大小写匹配,cf也匹配。

    参考地址:https://segmentfault.com/a/1190000004375773(精通正则表达式(第三版))  

5. 匹配空白行

  ^$  : 开头之后马上结束:空白行,不包括任何字符

  ns*r

     n匹配一个换行符,等价于x0a
     s匹配任何空白字符,包括空格制表换页
     r匹配一个回车符,等价于x0d

6. 匹配首尾空白字符: ^s*|s*$

7. 匹配版本号1.3.0等

  [d.]+

8. 匹配某个字符以外的所有字符: