反义匹配(负类)

反义:匹配不属于指定集合里的字符,两类写法:大写预定义元字符、[^...] 负字符集

一、预定义反义简写

小写(匹配)大写(反义,不匹配)说明
\w\W\w:字母、数字、下划线、汉字;\W:除此之外任意字符
\s\S\s:空白(空格、tab、换行);\S:非空白字符
\d\D\d:数字;\D:非数字字符
\b\B\b:单词边界;\B:不是单词边界的位置(位置匹配,不是字符)

\B位置,不消费字符,和前面几个不一样,不是用来匹配字符的。

二、[^...] 负字符集

语法:[^字符列表]

^ 必须写在中括号的最开头,才代表取反;放到括号里面其他位置,就是普通的 ^ 字符。

例子:

  1. [^x]:匹配任意不是 x 的单个字符
  2. [^aeiou]:匹配任意不是 a/e/i/o/u 的单个字符(非元音字母)
  3. [^0-9]:等价 \D,非数字

例子:提取a标签开头 <a ...>,不要后面的文本

<a [^>]+>
Code language: HTML, XML (xml)

拆解:

  • <a :固定开头
  • [^>]+一个或多个,不是 > 的字符
  • >:结束尖括号

含义:匹配 <a 开始,一直读到第一个 > 为止,刚好拿到 a 标签的起始标签,不会跨到标签外面。

不用贪婪模式也可以实现。对比贪婪写法:<a .+>,会一直匹配到整个文档最后一个 >(贪婪)。

[^>]+ 天然不会越过 >,效果等价非贪婪,但原理不同:直接禁止匹配 >

注意

  1. [a^b]:这里 ^ 不在最前面,只是普通字符 ^,不是取反!匹配 a 或 ^ 或 b
  2. [^]:不同引擎含义不一样,不要随便写
  3. [^aeiou] 只匹配单个字符,不是“匹配一串不是元音的文本”;要一串就加量词 [^aeiou]+

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注