`
tomcat_oracle
  • 浏览: 316997 次
社区版块
存档分类
最新评论

正则表达式里字符串”不包含”匹配技巧

    博客分类:
  • Java
阅读更多

经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含‘h’,‘e’,‘d’三个但字符。那什么样的正则表达式能过滤出不包含完整“hello”字串的信息呢?

 

  事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问题:

^((?!hede).)*$

 

  上面这个表达式就能过滤出不包含‘hede’字串的信息。我上面也说了,这种写法并不是正则表达式“擅长”的用法,但它是可以这样用的。

 

解释

 

  一个字符串是由n个字符组成的。在每个字符之前和之后,都有一个空字符。这样,一个由n个字符组成的字符串就有n+1个空字符串。我们来看一下“ABhedeCD”这个字符串:

    +--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+
S = |e1| A |e2| B |e3| h |e4| e |e5| d |e6| e |e7| C |e8| D |e9|
    +--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+---+--+

index    0      1      2      3      4      5      6      7

 

  所有的e编号的位置都是空字符。表达式(?!hede).会往前查找,看看前面是不是没有“hede”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。

 

  在上面的例子里,每个空字符都会检查其前面的字符串是否不是‘hede’,如果不是,这.(点号)就是匹配捕捉这个字符。表达式(?!hede).只执行一次,所以,我们将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配0次或多次:((?!hede).)*

 

  你可以理解,正则表达式((?!hede).)*匹配字符串"ABhedeCD"的结果false,因为在e3位置,(?!hede)匹配不合格,它之前有"hede"字符串,也就是包含了指定的字符串。

 

  在正则表达式里, ?! 是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。

2
0
分享到:
评论

相关推荐

    使用正则表达式拆分字符串

    通过学习和熟练掌握正则表达式拆分字符串的技巧,开发者可以更好地处理各种文本数据,提高代码的可读性和效率。在实际项目中,结合具体需求,灵活运用正则表达式,将大大提高开发效率和代码质量。

    java正则表达式替换字符串

    ### Java正则表达式替换字符串详解 #### 一、引言 在Java编程语言中,正则表达式是一种强大的文本处理工具,它可以帮助开发者轻松地完成字符串搜索、替换等任务。本文将详细介绍如何使用Java正则表达式进行字符串...

    正则表达式正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此

    正则表达式是一种强大的文本处理工具,能够帮助我们完成各种复杂的字符串搜索与替换功能。在实际开发过程中,正则表达式广泛应用于字符串处理、表单验证等多个方面。 #### 二、常用正则表达式集合 以下是一些常用的...

    正则表达式不包涵特殊字符(除了 指定字符 以外)

    - 该字符串包含不允许的特殊字符 `@` 和 `!`,因此不符合规则。 3. **合法示例**:“你好_世界2023” - 这个字符串含有中文字符和指定的特殊字符 `_`,符合规则要求。 4. **非法示例**:“你好_世界2023!” - ...

    Java使用正则表达式提取XML节点内容的方法示例

    这个正则表达式的意思是:匹配任何以 `>` 开始,以 `结束,并且中间可以包含任何字符(包括 `和 `>`)的字符串。 三、正则表达式在线测试工具 为了方便开发者测试和调试正则表达式,我们提供了两个非常方便的正则...

    python正则表达式匹配不包含某几个字符的字符串方法

    本文将分享如何使用Python正则表达式来匹配不包含特定字符集的字符串。 首先,我们来看一个基本的正则表达式匹配例子。假设我们要从一个字符串中找出所有以“https?”开头,后面跟着“://”,然后再以“.jpg”、“....

    vb正则表达式实例(正则表达式测试程序)

    - **构造函数**:创建`Regex`对象时,需要传入一个正则表达式字符串,如`New Regex("模式")`。 - **方法**: - `Match`:执行一次匹配,返回`Match`对象,如果未找到匹配,返回`Match.Empty`。 - `Matches`:...

    正则表达式测试工具C#版(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...

    基于正则表达式的字符串查询系统

    正则表达式,又称正规表示式或正则式,是一种用于匹配字符串模式的语言。它的核心在于一系列特殊的字符和结构,如"."代表任意字符,"*"表示前面的字符可以重复任意次数(包括0次),"+"表示前面的字符至少出现一次,...

    JS正则表达式获取字符串中特定字符的方法

    在JavaScript中,正则表达式是一种强大且灵活的文本处理工具,它可以用来搜索、匹配和操作字符串。本文将介绍如何使用正则表达式结合replace方法的回调函数功能来获取字符串中特定字符。这一技能在处理字符串数据时...

    正则表达式截取字符串的方法技巧

    综上所述,正则表达式提供了多种方法截取字符串,包括直接匹配和提取、分割字符串、结构化数据存储、异常处理等。在实际应用中,需要根据具体的业务逻辑选择最合适的模式和方法。通过熟练运用正则表达式,能够大幅度...

    LabVIEW中常用的字符串匹配符及正则表达式.doc

    ### LabVIEW中常用的字符串匹配符及正则表达式...无论是简单的字符串匹配还是复杂的文本分析,掌握这些基本的字符串匹配符和正则表达式的使用技巧都是非常有帮助的。希望本文能为您的LabVIEW开发工作提供有价值的参考。

    python使用正则表达式匹配字符串开头并打印示例

    在Python中使用正则表达式匹配字符串开头并打印的示例涉及到几个重要的知识点,包括正则表达式的编写、Python中的正则表达式库re的使用、以及如何利用正则表达式提取特定模式的字符串。以下是对这些知识点的详细介绍...

    EditPlus正则表达式替换字符串详解

    正则表达式是一种用于匹配、查找和替换字符串的强大工具。在文本处理领域有着广泛的应用,尤其是在编程语言中,它可以帮助我们高效地处理各种文本数据。本文将详细介绍如何在EditPlus这款编辑器中使用正则表达式来...

    JavaScript利用正则表达式替换字符串中的内容

    在JavaScript中,正则表达式是一种强大的工具,用于处理字符串,包括查找、匹配、替换等操作。本篇文章将深入探讨如何使用正则表达式来替换字符串中的内容。 首先,我们来看一个基本的替换示例。在JavaScript中,...

    C#正则表达式匹配与替换字符串功能示例

    本文通过实例详细介绍了C#中使用正则表达式进行字符串匹配与替换的技巧和注意事项。 首先,正则表达式在C#中是通过System.Text.RegularExpressions命名空间提供的。这个命名空间包含了一系列相关的类,如Regex、...

    正则表达式大全 正则表达式 模式匹配 Javascript

    正则表达式(Regular Expression)是一种模式匹配工具,在文本处理领域有着广泛的应用,尤其是在JavaScript等编程语言中,用于字符串搜索、替换以及提取等功能。本文将详细介绍一系列常用的正则表达式及其应用场景,...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    正则表达式(Regular Expression)是一种模式匹配语言,通过预定义的规则来识别和操作字符串。它由一系列特殊字符和组合构成,可以用来检查一个字符串是否符合特定的格式,或者从中提取所需的信息。例如,你可以用...

    Python正则表达式基础

    前者从字符串的开始位置匹配正则表达式,后者在整个字符串中查找匹配。此外,还需要了解贪婪与非贪婪匹配的概念。在某些情况下,一个正则表达式可能有多个匹配选项,贪婪匹配总是尽可能多地匹配字符,而非贪婪匹配则...

Global site tag (gtag.js) - Google Analytics