码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式——字符组运算

时间:2018-10-19 14:07:04      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:regex   集合运算   逻辑   字母   数字   语言   div   false   功能   

以上介绍了字符组的基本功能,它们在常用的语言中都有提供;还有些语言中为字符组提供了更强大的功能,比如Java和.NET就提供了字符组运算的功能,可以在字符组内进行集合运算,在某些情况下这种功能非常实用。

如果要匹配所有的元音字母(为讲解简单考虑,暂时只考虑小写字母的情况),可以用[aeiou],但是要匹配所有的辅音字母却没有什么方便的办法,最直接的写法是[b-df-hj-np-tv-z],不但烦琐,而且难理解。其实,从26个字母中"减去"元音字母,剩下的就是辅音字母,如果有办法做这个"减法",就方便多了。

Java语言中提供了这样的字符组:[[a-z]&&[^aeiou]],虽然初看有点古怪,但仔细看看,也不难理解。[a-z]表示26个英文字母,[^aeiou]表示除元音字母之外的所有字符(还包括大写字母、数字和各种符号),两者取交集,就得到"26个英文字母中,除去5个元音字母,剩下的21个辅音字母"。

.NET中也有这样的功能,只是写法不一样。同样是匹配辅音字母的字符组,.NET中写作[a-z-[aeiou]],其逻辑是:从[a-z]能匹配的26个字符中,"减去"[aeiou]能匹配的元音字母。相对于Java,这种逻辑更符合直觉,但写法却有点古怪--不是[[a-z]-[aeiou]],而是[a-z-[aeiou]]。例1-20集中演示了Java和.NET中的字符组运算。

例1-20  字符组运算

// Java  
"a".matches("^[[a-z]&&[^aeiou]]$");     //  => True  
"b".matches("^[[a-z]&&[^aeiou]]$");     //  => False  
// .NET  
Regex.IsMatch("^[a-z-[aeiou]]$", "a");  //  => True  
Regex.IsMatch("^[a-z-[aeiou]]$", "b");  //  => False  

 

正则表达式——字符组运算

标签:regex   集合运算   逻辑   字母   数字   语言   div   false   功能   

原文地址:https://www.cnblogs.com/gaara0305/p/9815561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!