设为首页 加入收藏

TOP

Perl正则表达式引用(三)
2018-10-10 04:10:26 】 浏览:298
Tags:Perl 正则 表达式 引用
s for postal codes.


这些正则表达式是通过hash进行嵌套的,hash的名称为%RE。例如模块Regexp::Common::URI::http,它提供的是HTTP URI的正则表达式,它嵌套了两层,第一层的key为URI,这个key对应的值是第二层hash,第二层hash的key为HTTP,于是可以通过$RE{URI}{HTTP}的方式获取这个正则。


例如,匹配一个http url是否合理:
use Regexp::Common qw(URI);
while( <> ) {
    print if /$RE{URI}{HTTP}/;
}


在学习shell脚本的时候,经常有人写匹配IPV4的正则表达式,现在我们可用直接从Regexp::Common::net中获取:
use Regexp::Common qw(net);
$ipv4=$RE{net}{IPv4};
print $ipv4;


以下是结果:
(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))


只是需要注意的是,在真正匹配的时候应该将得到的引用锚定起来,否则对318.99.183.11进行匹配的时候也会返回true,因为18.99.183.11是符合匹配结果的。所以,对前后都加上锚定,例如:
$ipv4 =~ /^$RE{net}{IPv4}$/;


将上面的ipv4正则改造一下(去掉非捕获分组的功能),让它适用于shell工具中普遍支持的扩展正则:
(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}


默认情况下,Regexp::Common的各个模块是没有开启捕获功能的。如果要使用$1、$N这种引用,需要使用{-keep}选项,至于每个分组捕获的是什么内容,需要参考帮助文档的说明。


例如:
use Regexp::Common qw(number);
while( <> ) {
    say $1 if /$RE{num}{int}{ ?base => 16 }{?keep}/;
}


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Perl正则表达式超详细教程 下一篇基础正则表达式详述

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目