热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

感觉文章和回复都不错,转载了用正则表达式找出不包含连续字符串abc的单词...

写过一篇正则表达式30分钟入门教程,有读者问:[^abc]表示不包含a、b、c中任意字符,我想实现不包含字符串abc应该如何写表达式?就我自己而言&
写过一篇"正则表达式30分钟入门教程",有读者问:
[^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?
就我自己而言,这个问题最简单的解决方法是使用编程语言的配合,找出那些包含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的字符串过滤掉呢?这个问题换句话说也就是怎么匹配整体而不是部分呢?现在需要明确用户的需求了:如果用户想要找的是单词,那就在表达式的两端加上\b,如果要找的是行,就加上^$。由于用户的问题没有明确说明,我就当作是单词吧。

于是等到了这样的表达式:\b((?,经过测试,这个表达式能匹配所有不包含abc的单词,以及单词abc。

怎么排除单词abc?经过一番思考,最后我认为判断单词是否以a开头的方式最为方便:\b(a(?!bc)|[^a](?!abc))((?(要么以后面不是bc的a开头,要么不以a开头,除了开头后面所有的字符必须前面和后面都不是abc)。经过测试,完全满足要求,Bingo!

使用正则表达式查找不包含连续字符串abc的单词,最终结果:\b(a(?!bc)|[^a](?!abc))((?
----------------
更新:根据maple的评论,更简洁的作法是
:
\b((?!abc)\w)+\b

posted on 2007-02-15 23:07 deerchao 阅读(2759) 评论(18)  编辑 收藏

评论

 221.221.165.* 2007-03-26 13:16

用这个不也可以么?

((?!abc).)*?         

 [楼主] 2007-03-26 14:12  

@maple
我试了一下,但是((?!abc).)*?好像什么也匹配不到吧?           

 221.221.165.* 2007-03-26 15:54

两头加上\b
和你的表达式结果差不多
不过要匹配出单个单词,还需要修改         

 221.221.165.* 2007-03-26 15:57

不好意思,应该是
\b((?!abc).)*\b

呵呵,多写了个问号         

 221.221.165.* 2007-03-26 16:18

再试试这个表达式吧

\b((?!abc)\S)+?\b

不知道我对题意的理解对不对,这个应该可以匹配出不包含abc的单词,当然abc这个单词也会排除         

 [楼主] 2007-04-02 10:56  

不错,您的这个表达式能达到同样的效果,而且更简洁。           

 222.75.41.* 2007-04-04 11:43

您好,受益匪浅,但是我想匹配3-5个以字母或数字开头的字串,其中不包括http,这样写却什么也匹配不到,请教!!
/^[a-zA-Z0-9]{3,5}b((?!http)\S)+?$/         

 [楼主] 2007-04-04 14:17  

您的表达式中间是不是多了一个b?
如果前面3-5个字母或数字也不能包含http,你可以使用:
^((?!http)[a-zA-Z0-9]){3,5}((?!http)\w)*$
如果前面可以包含http你可以使用:
^([a-zA-Z0-9]){3,5}((?!http)\w)*$

注:我是使用.Net的引擎进行测试的,也许在Javascript引擎下结果不同。           

 222.75.41.* 2007-04-04 15:31

非常感谢你及时的回复,.Net的引擎有点不同,呵呵,不行,不过楼上的朋友给我了一点启发:\b((?!http)\S)+?\b;但是如何限定长度呢??         

 [楼主] 2007-04-04 15:41  

我试了一下,Javascript应该也可以啊:

test.htm
          

  2007-10-22 23:50  

请教一个困扰我多次的问题,虽然类似,但我硬是没搞出来

已知&#xff1a;<[^>]&#43;>可以匹配所有HTML标签&#xff0c;从而通过替换标签内容去掉这些标签形成纯粹的文本

但我想在匹配替换时排除xxx 这两个标签从而让其在HTML文档中得到保留&#xff0c;却不知如何来写,希望能帮我研究研究&#xff0c;不胜感激&#xff01;&#xff01;           

 [楼主] 2007-10-23 02:41  

&#64;Felix
<(?!(/?(img|a)\b))[^>]*>

匹配xxx

xyz
的结果&#xff1a;



          

  2007-10-23 10:45  

楼主真是非常的生猛&#xff0c;测试通过了&#xff0c;感谢&#xff01;&#xff01;           

  2007-10-23 11:41  

楼主能否加我的MSN或Gtalk有事相商
lf1981##msn、com
Gtalk同理           

 207.46.55.* 2007-11-27 12:58

有用&#xff01;但是看不懂
欢迎来蜜桃玩
        

 118.144.40.* 2008-04-19 13:51

([^a]|a[^b]|ab[^c])         

 124.227.192.* 2008-05-29 10:43

如果我想找出字符串中有abc,但排除有&#64;abc的如何做呢?
比如说在.NET使用ACCESS"伪储存过程"中
我想替换 "abc" &#61; "&#64;abc" 中前面一个abc为"中文字段名"
变成 "中文字段名" &#61; "&#64;abc" ,请指教!         

 123.120.174.* 2008-08-18 11:54

你好博主&#xff0c;我用用vim处理log&#xff0c;现在我想只保留用户名是TEMP的log记录&#xff0c;可是VIM中好像没有?!这样的正则表达式&#xff0c;我用&#xff1a;
/^.* \(TEMP\)\{0}.*$

结果无法匹配&#xff0c;不知道博主有没有什么好办法&#xff1f;谢谢        



推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
author-avatar
手机用户2502911617_428
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有