跳到主要内容

3.3 取非匹配

字符集合通常用来指定一组必须匹配其中之的字符。但在某些场合,我们需要反过来做,给出一组不需要得到的字符。换向话说,除了那个字符集合里的字符,其他字符都可以匹配。

最先想到的办法是,用一个字符集合把你需要的字符一一列举出来,但如果只需要把一小部分字符排除在外的话,那么做既麻烦又容易有遗漏。其实这里有一个更简明的办法:用元字符 ^ 来表明你想对一个字符集合进行取非匹配-—这与逻辑非运算很相似,只是这里的操作数是字符集合而己

例 1

[ns]a[^0-9]\.xls
在工具中查看
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
sam.xls
na1.xls
na2.xls
sa1.xls
ca1.xls

分析

这个例子里使用的模式与前面的例子里使用的模式刚好相反。前面 [0-9] 只匹配数字,而这里 [^0-9] 匹配的是任何不是数字的字符。也就是说, [ns]a[^0-9]\.xls 将匹配 sam.xls,但不匹配 nal.xls、na2.xls 或 sal.x1s。

注意

^ 的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在 ^ 字符后面的那一个字符或字符区间。

小结

元字符 [] 用来定义一个字符集合,其含义是必须匹配该集合里的字符之一。定义一个字符集合的具体做法有两种:

  • 一是把所有的字符都列举出来;
  • 二是利用元字符 - 以字符区间的方式给出。

字符集合可以用元字符 ^ 来求非;这将把给定的字符集合强行排除在匹配操作以外,除了该字符集合里的字符,其他字符都可以被匹配。

该内容基于 《正则表达式必知必会》 二度创作
转载请遵守原作者相关协议并注明本页地址
https://iamhefang.cn/tutorials/正则表达式/第三章-匹配一组字符/3.3-取非匹配