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

Posted gaara0305

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式——字符组运算相关的知识,希望对你有一定的参考价值。

以上介绍了字符组的基本功能,它们在常用的语言中都有提供;还有些语言中为字符组提供了更强大的功能,比如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  

 

以上是关于正则表达式——字符组运算的主要内容,如果未能解决你的问题,请参考以下文章

循环通过 python 正则表达式匹配

Python 正则表达式匹配 OR 运算符

Python 正则表达式转义运算符 \ 在替换和原始字符串中

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

正则表达式

正则表达式匹配字符周围的字符,正则表达式中的AND运算符?