尝试使用正则表达式构建逻辑“与”运算时,我们有几种方法可以遵循。 第一种方法似乎很明显,但是如果考虑一下,默认情况下正则表达式是逻辑“和”的。 正则表达式中的每个顺序字符都一起“与”。 如果您可以按顺序表达您的陈述,那么工作已经为您完成。

但是,既然您已经搜索了这么远,我们可以假设您正在寻找更高级的东西。 为方便起见,我们有两个选择:我们可以使用“ lookaheads”,或者如果您使用的任何工具或语言支持,也可以使用单独的正则表达式执行第二次匹配。

先行查找实现逻辑“与”

先行查找和后向操作本质上是可以放在正则表达式上的额外约束。 您可以指定成功匹配需要满足的其他模式。 以下是预读表达式的示例。

(?=.*word1)(?=.*word2)(?=.*word3)

请注意,每个表达式都包含.* –这是因为先行查找对位置敏感,并且从它们在模式中出现的位置开始匹配; 因此,例如,如果我们有一个类似于以下模式的模式:

^Start (?=.*kind)(?=.*good)(?=.*word).* deed$

此模式将匹配"Start with a good word and end with a kind deed" and “Start with a kind word and end with a good deed

总结:一旦开始第一个look-ahead,就保存表达式中的匹配位置。 第一个look-ahead中的.*匹配获得kind之前需要的多个字符; 匹配位置被重置,并且下一个look-ahead向前搜索“good”; 最后但并非最不重要的一点是,我们最终的look-ahead将搜索“word”,然后像往常一样恢复模式匹配。 匹配继续使用表达式的基本.*,并继续通过“deed”匹配到字符串的末尾。

这样做的原因是,如上所述,因为在评估每次环视后都会重置匹配位置。 这意味着我们相邻的“and”look-ahea表达式的顺序并不重要。 但是,如果我们将条件之一移至.*之后,则会看到不同的结果:

^Start (?=.*kind).*(?=.*good) deed.$

现在(?=.*good)排在我们的catch-all之后,我们之前的字符串都不匹配,因为在评估.*之后不可能存在“good”。

提示,如果要匹配整个单词而不是较长单词的部分字符串,则需要在语句中添加单词边界:

^Start (?=.*\bkind\b)(?=.*\bgood\b)(?=.*\bword\b).* deed$

用您的语言实现逻辑“与”

如果所有其他方法都失败了,那么您应该始终简单地执行另一场比赛,并使用所选编程语言的本机“and”逻辑功能将结果组合在一起,您总是会感到自在。 对于其他人来说,将来通常更容易维护,并且对中等数据集的性能影响很小。 例如,在Java中:

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;import org.junit.Test;public class RegexTest
{@Testpublic void testRegex(){assertTrue(stringMatches("Start with a good word and end with a kind deed."));assertTrue(stringMatches("Start with a kind word and end with a good deed."));assertFalse(stringMatches("Start with a deed."));}private boolean stringMatches(String string){return string.matches("^Start .* deed.$") && string.matches(".*good.*") && string.matches(".*kind.*");}}

“And” 在正则表达式中 ``相关推荐

  1. 正则表达式中的*,+,?以及\w和\W的区别等常见问题的总结

    正则表达式中的*,+,?以及\w和\W的区别等常见问题的总结_wl_ss的博客-CSDN博客 正则表达式中的*,+,?以及\w和\W的区别等常见问题的总结_wl_ss的博客-CSDN博客 正则表达式中 ...

  2. 小tips:JS之按位取反,语法标签label,正则表达式中replace的0,1是什么?

    JS按位取反 Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算.如 ~1 = -2; ~2 = -3; 来看看~1的计算步骤: 将1(这里叫:原码)转二进制 = 000 ...

  3. 正则表达式中grep,sed的用法(包括基本的正则表达式和扩展的正则表达式)

    一 正则表达式   Basic REGEXP:基本正则表达式 Extended REGEXP:扩展正则表达式 (正则表达式是使得计算机变成智能化的重要途径) 1.1 基本正则表达式 . : 表示匹配任 ...

  4. 正则表达式中的非捕获组是什么?

    非捕获组(即(?:) )如何在正则表达式中使用,它们有什么用? #1楼 在复杂的正则表达式中,您可能会希望使用大量的组,其中一些用于重复匹配,而另一些则提供反向引用. 默认情况下,与每个组匹配的文本会 ...

  5. 定义一个圆类java用echo_正则表达式中圆括号的作用

    圆括号在正则表达式中有着十分重要的作用. 在shell中的圆括号和正则中的圆括号是有区别的.在shell中圆括号意味着进程替换,比如  (var=1)表示在子shell(子进程)中创建变量var并赋值 ...

  6. 正则表达式中模式修正符作用详解(i、g、m、s、x、e)

    正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或a ...

  7. Java 正则表达式中为什么反斜杠“\“需要用“\\\\”表示

    正则表达式语法 在其他语言中,\\(两个斜杠) 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义. 在 Java 中,\\ (两个斜杠)表示:我要插入一个正则表达式 ...

  8. 正则表达式中的小括号用法

    小括号中的连续字符作为可选: "Nov" -match "\bNov(ember)?\b"  返回true    "November" -m ...

  9. Python字符串和正则表达式中的反斜杠(‘\‘)问题

    在Python普通字符串中 在Python中,我们用''来转义某些普通字符,使其成为特殊字符,比如 In [1]: print('abc\ndef') # '\n'具有换行的作用 abc defgIn ...

  10. python正则表达式中的转义字符_详解python中正则表达式的反斜线的转义功能

    最近深入研读了正则表达式的一本经典著作,对于在python中使用正则表达式时使用反斜线转义功能时有些心得,特与大家分享. 核心思想:在python中使用正则表达式时要切记反斜线具有两层转义功能,如果你 ...

最新文章

  1. python学习笔记(装饰器、迭代器生成器、内置函数、软件目录开发规范)
  2. CSS 文字处理总结
  3. 当我们谈游戏优化时,我们谈些什么
  4. expdp导出表结构_(转)oracle使用expdp、impdp和exp、imp导入导出表及表结构
  5. Socket网络编程--Libev库学习(3)
  6. 计算机网络学习笔记(14. OSI参考模型②)
  7. StringUtils 方法介绍(转载)
  8. 运维之我的docker-不要在给你的docker安装ssh server
  9. idea 字体颜色设置 + 背景图片
  10. **MA2灯光控台的TIMECODE 说明**
  11. 计算机用户名不显示,Windows10中设置不显示最后用户名的方法
  12. 项目经验介绍的STAR法则--面试
  13. colormap保存 matlab_matlab中colormap用法
  14. 电子科技大学信息与通信工程学院保研面试题
  15. 计算机专硕日语考研学校排名,日语考研院校排名(日语专硕学校排名)
  16. D. Masquerade strikes back(思维)
  17. c语言CFile的使用方法,C/C++文件操作之CFile
  18. 关于测试的一篇论文, 基于web端selenium的自动化测试设计与实现(有需要的联系我 此论文内容缺失,不要直接用 一经发现,后果自负)
  19. 信号、传输介质、数制转换
  20. vmware虚拟主机使用大于4G的启动盘安装win7至win10的iso文件,无法启动安装的解决方法。

热门文章

  1. 机械革命s1 pro ubunntu18.04 双系统 并配置nvidia驱动
  2. 【27】RxJava使用场景
  3. 在早教阶段幼儿应不应该使用计算机,计算机与幼儿教育
  4. 达梦DM8-DCA学习笔记
  5. SWA(Stochastic Weight Averaging)实验
  6. 辞职时被老板叫去谈话挽留,怎样避免被套路
  7. c语言小数除于整数怎么运算,C#:将int除以100
  8. php监控访客_PHP 记录访客的浏览信息方法
  9. 揭秘中小企业网络营销迷局与现状
  10. js+css让背景图片动起来