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

经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(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字符串,也就是包含了指定的字符串。
在正则表达式里,?!是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。

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

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

    这篇文章主要介绍了正则表达式匹配不包含某些字符串的技巧,详细分解了应该怎么做和这么做的原因,需要的朋友可以参考下 经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^ ...

  2. python3正则表达式匹配但不包括最后一个字符_正则表达式匹配不包含某些字符串的技巧...

    经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤"hede"字串,但这种写法是错误的.我们可以这样写:[^hede],但这样 ...

  3. 正则表达式匹配不包含特定字符串解决匹配溢出问题

    匹配溢出问题在正则表达式当中算是比较常见的问题,它常常导致我们匹配结果莫名其妙的出错,本文专门为你讲解如何通过匹配不包含特定字符串的方法来解决这类问题. 那么,什么是匹配溢出呢? 下面我们来看个例子: ...

  4. 正则表达式 匹配不包含指定字符串的方法

    我们经常会遇到想找出不包含某个字符串的文本,比如我要匹配不含有20211229 和 20211230的字符串. 正则表达式中有(?=a)和(?!a)来表示我们是否需要匹配某个东西. 所以,有需要不匹配 ...

  5. 正则表达式总结,正则表达式匹配不包含某个字符串

    1.匹配a标签及其url: Regex regA = new Regex(@"<a[\s]+[^<>]*href=(?:""|')([^<> ...

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

    python正则表达式匹配不包含某几个字符的字符串方法 一.匹配目标 文件中所有以https?://开头,以.jpg|.png|.jpeg结尾的字符串 二.尝试过程 1) 自然想到正则表达式r'(ht ...

  7. java 正则 不包含_java使用正则表达式匹配不包含某个规则的字符串

    测试数据: 例如上面这几条简单的日志条目,我们想实现两个目标: 1.把8号的数据过滤掉: 2.把那些不包含robots.txt字符串的条目给找出来(只要Url中包含robots.txt的都给过滤掉). ...

  8. 正则表达式怎样匹配 不包含特定字符串的字符串

    正则表达式匹配公式为:^((?!XXX).)*$, XXX为字符串. 转载于:https://www.cnblogs.com/lixiaolun/p/5627254.html

  9. java判断字符串是否包含某个字符串_Bash技巧:使用[[命令的 =~ 操作符判断字符串的包含关系...

    在 Linux bash shell 中,可以使用 [[ 命令来进行判断. 其中,可以使用 [[ 命令的 =- 操作符来判断某个字符串是否包含特定模式. 查看 man bash 对 [[ 命令的 =~ ...

最新文章

  1. c语言中的extern_7.6 C语言内部函数和外部函数
  2. 6万广州人坐过无人出租车,过半月薪一万以上 | 中国首份Robotaxi乘客调研报告...
  3. php如何转换类型,PHP数据类型转换
  4. 浏览器中xhr选项是做什么用的呢_XHR和AJAX终于搞懂了!!
  5. mysql中索引约束有哪些_Mysql中索引和约束的示例语句
  6. 转:一个网页图表的demon网站
  7. python修改zabbix中的ip
  8. 磁盘结构非常详细的介绍
  9. 小甲鱼c语言照片,【跟着小甲鱼学C语言】P14 给大家介绍对象
  10. 国家2000坐标系的理解
  11. 大数据与云计算是什么关系
  12. 请为自己计算机进行磁盘优化,如何对Win10系统的磁盘进行清理并优化
  13. 家用路由器配置方法(精简版)
  14. RedHat9上安装Oracle9i手记(原作:hotman_x)
  15. 【GitHub】利用Github建立你的个人网站
  16. (个体户)注册公众平台步骤
  17. 吉林大学计算机李昕,本报新聘百名特约教工通讯员
  18. 解决使用Java CV导致物理内存过高问题
  19. DNA旋转特效 html+css
  20. 台式计算机如何双屏显示,台式机如何去设置双屏

热门文章

  1. tessafe.sys不兼容驱动程序怎么解决?
  2. 2022-2027年中国无铅汽油行业市场全景评估及发展战略规划报告
  3. 图文转换html,语言运用 图文转换专题
  4. BCB用OLE操作Excel(目前最全的资料)
  5. Splinter(Gtalk)的免费网络电话
  6. “建筑云”开先河, “天工平台”成建筑产业数字化转型抓手
  7. NFT 泡沫是否已经被挤破
  8. Android模仿微信录制小视频
  9. 离线在线计算机系统,怎么离线重装系统?最简单离线系统重装方法
  10. Unity中图片去色两种方案