当前位置: 首页 > web >正文

正则表达式匹配“不包含某些字符串”的技巧

这篇文章主要介绍了正则表达式匹配不包含某些字符串的技巧,详细分解了应该怎么做和这么做的原因,需要的朋友可以参考下

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

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

^((?!hede).)*$

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

解释
一个字符串是由 n 个字符组成的。在每个字符之前和之后,都有一个空字符。这样,一个由 n 个字符组成的字符串就有 n+1 个空字符串。我们来看一下ABhedeCD这个字符串:
在这里插入图片描述
所有的 e 编号的位置都是空字符。表达式(?!hede).会往前查找,看看前面是不是没有hede字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。这种正则表达式的“查找”也叫做 “zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。

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

((?!hede).)*

你可以理解,正则表达式((?!hede).)*匹配字符串ABhedeCD的结果false,因为在e3位置,(?!hede)匹配不合格,它之前有hede字符串,也就是包含了指定的字符串。
在正则表达式里,?!是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。

http://www.xdnf.cn/news/11195.html

相关文章:

  • SAPCRM销售订单集成创建
  • C#中Socket的简单使用
  • 注册系统热键 RegisterHotKey()
  • Android中ProgressDialog的使用
  • BP神经网络算法基本原理,bp神经网络算法详解
  • m3u8直播测试地址
  • 面向对象设计的八大基本原则
  • VMware虚拟机Windows 10安装使用教程(非常详细)从零基础入门到精通,看完这一篇就够了_vmware安装windows10
  • BUMO 区块链开发文档
  • Dogfooding-爱奇艺移动端后台灰度环境优化实践
  • Union和Union All的使用
  • jQuery.serializeArray() 函数详解
  • C/C++编程:log4cpp使用学习
  • wait,notify/notifyAll的使用及实现原理
  • ObjectDock
  • Java 10正式发布,带来了这些新特性
  • Coqui:创建逼真的生成式人工智能语音
  • 在网络安全领域,比较牛的中国黑客有哪些?
  • git clone 遇到问题:fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxx
  • iOS开发进阶(一):iOS原生开发环境搭建步骤详解_ios编译环境搭建
  • 关于connectionstring字符串的那点事
  • Python OpenCV 3.x 示例:6~11
  • cache介绍及问题解决
  • 原始数据哪里找?这些网站要用好!200个国内外经济/金融/行研/咨询数据网站大全(附链接)...
  • Linux系统中rpm命令用法详解
  • 华为3108raid安linux,华为服务器 RAID卡配置 SR430 LSISAS3108(Legacy/Dual模式)传统模式
  • CorelDRAW X4 SP2 简体中文正式版精简增强版
  • 简易日志告警系统
  • 群晖上搭建teamspeak3语音服务器
  • 如何实现两地星三角启动