正则表达式匹配不包含特殊子串的字符串(零宽断言的使用)

简介:

零宽断言的概念可以参考之前的博文

http://cnn237111.blog.51cto.com/2359144/749047

零宽断言,之所以叫零宽,是因为它不消耗字符的,通俗的讲,它不匹配字符串,而是匹配一个位置。比如对于字符串

abcdefg,在正则表达式看来,是下面这个样子的。

p1 a p2 b p3 c p4 d p5 e p6 f p7 g p8 h p9

p1,p2等代表位置,因此8个长度的字符串有9个位置。零宽断言就匹配这些位置。

正则表达式的先行断言和后行断言一共有4种形式: 
(?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) 
(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion) 
(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion) 
(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)

正负只是表示相等还是不相等。

比如在字符串

A community is a place where communication and understanding happens中,要匹配后面是字母t,但t后面的必须不是原音字母aeiou的。那么如果写成这种写法:t[^aeiou],那么还是会把t后面的字符也匹配进来。

7B454863686547E0B0C98B6BAA0956C7

如果使用零宽断言的话,就可以解决这个问题。

正则表达式t(?=[^aeiou]) 或者t(?![aeiou])都匹配t和一个位置。

8A47FC4F3A1B4A22ADCB1936378E0717

D8D2AA1FB1674FC58C3F6CE295306D12

那么比如匹配不包含字符串ab的行写法就应该如下:

先写下(?!ab),意思是匹配一个位置,该位置后面没有ab,然后写出(?!ab).,意思就是该位置后面可以跟任何一个字符(除了ab),但这个正则表达式只匹配单个字符,因此该模式匹配某个位置后的单个字符,该字符是a且后面是b,则该字符就得不到匹配。因此对于多个字符只要把该字符分组捕获后加上*即可,因此最终的正则表达式为

((?!ab).)*

如果匹配不包含ab的某一行的话

就是如下写法

^((?!ab).)*$

775889B78C6042B79BC1BCE1E82E680C














本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1003376,如需转载请自行联系原作者


相关文章
|
7月前
|
JavaScript 前端开发 Java
正则表达式深度解析:匹配任意字符串
【4月更文挑战第1天】
3563 0
|
7月前
|
JavaScript 前端开发
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
|
2月前
|
JavaScript 前端开发 Java
如何使用这个正则表达式来验证一个字符串是否符合特定的格式要求?
如何使用这个正则表达式来验证一个字符串是否符合特定的格式要求?
|
2月前
|
Java API 索引
U4字符串以及正则表达式
【10月更文挑战第19天】在 Java 中,字符串是重要数据类型,支持多种操作如长度获取、字符访问、子串提取等。正则表达式提供强大的模式匹配和文本处理功能,通过 `Pattern` 和 `Matcher` 类实现。示例代码展示了如何使用正则表达式匹配单词字符。常用语法包括字符类、数量词、边界匹配和分组。
|
3月前
|
JavaScript 前端开发 Java
使用这个正则表达式来验证一个字符串是否符合特定的格式要求
使用这个正则表达式来验证一个字符串是否符合特定的格式要求
146 5
|
3月前
|
前端开发 C#
C# 一分钟浅谈:字符串操作与正则表达式
本文详细介绍C#中的字符串操作与正则表达式应用,涵盖字符串拼接、分割、查找及替换等基础操作,并通过实例讲解正则表达式的模式匹配、文本替换与分组捕获技巧。同时,文章还探讨了性能优化、复杂度管理和安全性等问题及解决策略,助你提升编程效率,应对实际开发挑战。
79 0
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
|
6月前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
6月前
|
数据采集 Java 开发者
正则表达式替换字符串的最佳实践与应用
正则表达式替换字符串的最佳实践与应用
|
7月前
|
数据挖掘 程序员 索引
探索Python的字符串操作和正则表达式
【4月更文挑战第8天】Python以其优雅的语法和强大的文本处理能力,让处理文本数据变得简单有趣。本文介绍了字符串操作和正则表达式的应用。在Python中,字符串是字符序列,支持拼接、索引和切片。正则表达式则提供灵活的模式匹配,用于查找、替换和分割文本。通过`re`模拝,我们可以实现对特定模式的精准匹配,如查找不分大小写的&quot;Python&quot;,或替换电子邮件地址为星号。学习和掌握这些工具,将使你在文本处理任务中更加高效,成为信息时代的艺术家。
32 1