一、介绍
正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配;由于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. 匹配某个字符以外的所有字符:









