Perl6 正则表达式增强之定制字符集合
时间:2010-08-01
来源:互联网
Perl6 的正则表达式功能得到了极大的增强。再一次史无前例地占领了字符串模式匹配领域的高地。
下面就以其中一个小小的特性为例,介绍一下这种变化。
Perl5 里面,如果我想要匹配几个字母之一的话,用这个语法:
$str =~ /[abcde]/;
如果字符集合比较大,恰巧又是连续的,那么还可以有一种缩写方式:
$str =~ /[a-z]/;
这个功能非常有用,并且许多正则表达式引擎都提供了,想必用过的人也不在少数,
那么,大家有没有想过,其实这个功能还是不够强大,比如下面这个需求就实现不了了:
【请匹配一个辅音字母,后面跟一个元音字母】
$str =~ /[a-z][aeiou]/? 不对。
$str =~ /[^a-z][aeiou]/? 也不对。
然后你只好老老实实地把 19 个辅音字母挨个儿傻傻地敲一遍。
实际上我们在这里需要的是一种集合的减法:也就是从全部 26 个字母中,减掉 aeiou 5 个元音字母和 yw 两个半元音字母。
Perl6 很好地支持了这种需求:
$str ~~ m/ <[a..z]-[aeiouyw]> /;
注意这里用到了 < [] - [] > 这种形式,这种形式表示两个集合的减法。
此外你还可以用加法:
<[a..z]+[0..9]>
或者对集合取反:
<-[aeiou]>
有关这个特性就先介绍到这里。大家有兴趣的可以先安装一个 rakudo star 学习一下(里面有一个 pdf 和一个解释器环境)
下载链接:
http://github.com/rakudo/star/downloads
下面就以其中一个小小的特性为例,介绍一下这种变化。
Perl5 里面,如果我想要匹配几个字母之一的话,用这个语法:
$str =~ /[abcde]/;
如果字符集合比较大,恰巧又是连续的,那么还可以有一种缩写方式:
$str =~ /[a-z]/;
这个功能非常有用,并且许多正则表达式引擎都提供了,想必用过的人也不在少数,
那么,大家有没有想过,其实这个功能还是不够强大,比如下面这个需求就实现不了了:
【请匹配一个辅音字母,后面跟一个元音字母】
$str =~ /[a-z][aeiou]/? 不对。
$str =~ /[^a-z][aeiou]/? 也不对。
然后你只好老老实实地把 19 个辅音字母挨个儿傻傻地敲一遍。
实际上我们在这里需要的是一种集合的减法:也就是从全部 26 个字母中,减掉 aeiou 5 个元音字母和 yw 两个半元音字母。
Perl6 很好地支持了这种需求:
$str ~~ m/ <[a..z]-[aeiouyw]> /;
注意这里用到了 < [] - [] > 这种形式,这种形式表示两个集合的减法。
此外你还可以用加法:
<[a..z]+[0..9]>
或者对集合取反:
<-[aeiou]>
有关这个特性就先介绍到这里。大家有兴趣的可以先安装一个 rakudo star 学习一下(里面有一个 pdf 和一个解释器环境)
下载链接:
http://github.com/rakudo/star/downloads
作者: flw 发布时间: 2010-08-01
$str =~ /[a-z](?<![aeiouyw])[aeiou]/
作者: 黑色阳光_cu 发布时间: 2010-08-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28