au3 正则参考 -05-负字符组
<!DOCTYPE html>
[^... ] 负字符组 (排除型字符组)
负字符组指定一个字符列表, 匹配过程排除列表包含的字符. 此字符列表可以单独指定和/或作为范围指定. 可以包括一个或多个文本字符, 转义字符或字符类的任意组合.
可以连接两个或更多字符范围. 例如, 若要排除从 0 至 9 的十进制数范围, 和从 a 至 f 的小写字母范围, 以及从 A 至 F 的大写字母范围, 则可使用 [^0-9a-fA-F] .
[^abc] 表示匹配时必须排除字符 a , b , c . 负字符组中的前导符 ^ 是强制的, 指示字符组为负字符组, 而不是正字符组.
下表列出了一些常见负字符组的正则表达式模式:
模式 | 匹配内容 |
---|---|
[^\x00-\xff] | 排除 0 到 255 的所有 ANSI 字符. 即匹配任意一个汉字. [^\x00-\xff]+ 匹配连续的汉字. |
[^\p{P}\d] | 匹配标点符号和十进制数字字符以外的所有字符. |
[^aeiou] | 匹配除元音以外的所有字符. |
下面示例匹配以字符 th 开头且后面不跟 o 的任何单词:
字符串: thought thing though them through thus thorough this
表达式: \bth[^o]\w+\b
匹配结果(标志 3):
[0]thing
[1]them
[2]through
[3]thus
[4]this
正则表达式分析:
模式 | 说明 |
---|---|
\b | 匹配单词的开始位置. |
th | 匹配文本字符 th . |
[^o] | 负字符组. 匹配任何不是字母 o 的字符. |
\w+ | 匹配一个或多个单词字符. |
\b | 匹配单词的结束位置. |
新手最容易犯的错误就是, 用 [^abc] 或 [^(abc)] 这样的表达式来匹配不包含 "abc" 子字符串的字符串.
例如:
源字符串: "<aaa>bbb<abc>ccc<ddd>"
规则描述: 取出源字符串中格式为<...>, 但<>中不是 abc 的内容.
预期结果: <aaa>、<ddd> (测试标志 3)
错误写法: <[^abc]*> (测试标志 1, 2, 3, 4 都只能匹配 <ddd>)
正确写法: "<(?!abc>)[^>]*>"
表达式分析:
模式 | 说明 |
---|---|
< | 开始匹配一个左尖括号 < |
(?!abc>) | 负预测先行断言, ?! 为负向预取, 表示从这个位置开始不匹配字符串 abc> . |
[^>]* | 负字符组. 匹配 0 或多个不是 > 的其它字符. 即匹配左尖括号 < 后面不是字符串 abc> , 只到下面子模式指定模式前的所有字符. |
> | 跟着匹配一个右尖括号 > 完成一次匹配过程. |
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!