参考资料:
http://www.cnblogs.com/deerchao/archive/2007/02/15/651411.html
就我自己而言,这个问题最简单的解决方法是使用编程语言的配合,找出那些包含abc的,剩下的就是不包含的了——懒人的风格。但我写的是教程,读者未必都有编程的基础,有些只是使用一些工具从txt文档中抽取出一些信息,所以要回答还是必须完全通过正则表达式来完成。
于是打开了RegexTester,开始试验,先是试了使用((?'test'abc)|.)*(?(test)(?!))(含意是:查找abc,或任意的字符,如果找到了abc,就把它存入命名为test的组里,到最后检查test组里是否有内容,如果有就匹配失败,相关说明见教程),结果是"abc","aabc","abcd","aa"都能通过测试,看来是到最后测试到test组存在后又回溯了,此解决方案不可行。
然后又试了(.(?!abc))*(找出所有后面不是abc的字符),结果是"abc","abcd"通过测试,"aabc"则只截取了后面的"abc",显然不行。
那加强条件试试:((?<!abc).(?!abc))*(找出所有前面和后面都不是abc的字符),结果是所有包含abc的字符串都只截取了里面的"abc",不包含abc的则直接通过。
现在看来有点戏了,但是怎么把那些内部包含abc的字符串过滤掉呢?这个问题换句话说也就是怎么匹配整体而不是部分呢?现在需要明确用户的需求了:如果用户想要找的是单词,那就在表达式的两端加上\b,如果要找的是行,就加上^和$。由于用户的问题没有明确说明,我就当作是单词吧。
于是等到了这样的表达式:\b((?<!abc).(?!abc))*\b,经过测试,这个表达式能匹配所有不包含abc的单词,以及单词abc。
怎么排除单词abc?经过一番思考,最后我认为判断单词是否以a开头的方式最为方便:\b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*\b(要么以后面不是bc的a开头,要么不以a开头,除了开头后面所有的字符必须前面和后面都不是abc)。经过测试,完全满足要求,Bingo!
使用正则表达式查找不包含连续字符串abc的单词,最终结果:\b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*\b
----------------
更新:根据maple的评论,更简洁的作法是:\b((?!abc)\w)+\b
分享到:
相关推荐
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...
- **JavaScript中的正则表达式**:JavaScript的正则表达式对象提供了丰富的功能,包括全局匹配、忽略大小写等选项。 - **.NET框架中的正则表达式**:通过System.Text.RegularExpressions命名空间提供支持。 #### 六...
8. **转义字符**:在正则表达式中,有些特殊字符如`-`, `(`, `)`, `[`, `]`, `^`, `$`, `*`, `+`, `?`, `|`, `\`, `.`等需要通过在前面添加反斜杠`\`来进行转义,以便当作普通字符处理。 正则表达式的复杂性在于它...
本文将深入探讨Delphi XE10中的正则表达式功能,包括基本概念、语法、API接口以及实际应用案例。 一、正则表达式基础 正则表达式(Regular Expression)是一种特殊的字符串模式,用于在文本中搜索匹配该模式的字符...
正则表达式(Regular Expression)是一种强大的工具,用于在字符串中匹配特定模式,它在这里被用来判断用户设定的密码是否符合一定的强度标准。以下是对这个话题的详细解释。 首先,密码强度通常涉及到以下几个方面...
正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或提取符合特定模式的文本。正则表达式并非新概念,其起源可追溯到20世纪早期对神经网络的研究,由数学家Stephen Kleene提出,并在Ken Thompson...
正则表达式是一种强大的文本处理工具,用于在字符串中寻找匹配特定模式的子串。它在编程语言如PHP中有着广泛的应用,包括数据验证、文本提取、搜索与替换等任务。正则表达式通过一系列特殊字符(元字符)和结构来...
如果希望匹配文本中的特定位置,可以使用特殊字符,但这些字符在正则表达式中有特殊含义,被称为元字符,包括 [ ] \ ^ $ . | ? * + ( )。若要将它们作为普通字符匹配,需要使用反斜杠 `\` 进行转义。例如,`\+` 会...
本文将深入探讨Linux Shell下的正则表达式,包括其基本概念、元字符、模式匹配以及常用的实践工具和教材。 一、正则表达式基础 正则表达式(Regular Expression,简称RE)是一种模式匹配语言,用于在文本中查找符合...
正则表达式能够帮助开发者验证用户输入、搜索字符串中的特定模式,以及进行复杂的文本格式化和替换。 在【ASP.NET 中的正则表达式】中,开发者可以利用内置的验证控件如`RegexValidator`来实施正则表达式规则,确保...
例如,"hi"就是一个简单的正则表达式,它匹配任何包含连续的"h"和"i"的字符串。而"\bhi\b"则更进一步,它只会匹配单独的单词"hi",不会匹配到像"him"或"history"这样的单词。 元字符是正则表达式中的特殊符号,它们...
本书的后半部分集中于正则表达式的讲解,包括它的语法、选项和特殊字符,同时介绍了如何构建复杂的正则表达式以匹配文本中的复杂模式。 正则表达式可以简化许多文本处理任务,比如验证电子邮件地址等。例如,假设有...
1. **Regex类**:C#中的`System.Text.RegularExpressions`命名空间包含了一个名为`Regex`的类,它是正则表达式操作的核心。这个类提供了许多静态方法(如`Match`, `Matches`, `IsMatch`, `Replace`, `Split`)和实例...
本文将深入探讨C#中的正则表达式,以及如何匹配数字、汉字和英文等不同类型的字符。 首先,我们要了解C#中的`Regex`类,它是处理正则表达式的主干。你可以使用它的静态方法如`Match`、`Matches`、`IsMatch`和`...
例如,"abc123"就是一个简单的正则表达式,匹配包含这些字符的字符串。 2. **特殊字符**:如`\d`代表数字,`\w`代表字母或数字,`\s`代表空白字符。例如,`\d+\w+`可以匹配一个由数字开头,后跟一个或多个字母的...
例如,最基本的正则表达式"hi"将匹配任何包含连续字母"hi"的字符串。要精确匹配单词"hi",我们需要使用边界符`\b`,使得表达式变为`\bhi\b`,这样只会匹配到独立的单词"hi",而不是出现在其他单词中的"hi"部分。此外...
在正则表达式中,我们可以使用字符集`[]`来指定一组允许的字符。例如,数字可以表示为`[0-9]`,小数点是`.`,但需要注意`.`在正则表达式中具有特殊含义,代表任意字符,所以我们需要转义它,写作`\.`。减号在字符...
正则表达式是一种强大的文本模式匹配工具,广泛应用于编程语言如Java中,用于处理字符串数据,实现字符串的搜索、替换、提取等操作。它能够精确描述复杂的文本规则,帮助开发者高效地处理文本数据。 #### 二、入门...
正则表达式(Regular Expression)是一种强大的文本处理工具,它使用一种特定的语法来匹配、查找、替换或者验证字符串中的模式。在编程语言中,正则表达式被广泛用于数据验证、文本搜索和替换等场景。这个“正则...