首页 > 解决方案 > 如何使用正则表达式匹配需要满足多个需求的模式?

问题描述

我在egrep尝试找出用于正则表达式模式匹配的 AND 类似运算符时遇到问题,我需要匹配给定字符串列表中必须满足多个条件的所有字符串,这是我遇到的一些问题

1) 找到包含两个连续 e 并且还包含至少两个 i 的单词集合(ieei有效)

2) 找到至少 5 个字符长且不包含任何元音的单词集

我尝试使用前瞻(?=.*?ee)(?=.*?i.*i),但它不起作用,我在这里错过了什么?

标签: regexgrep

解决方案


正如Sundeep所提到的,您的grep实现可能通过使用标志来支持 PCRE -P,在这种情况下,以下将起作用:

grep -P '(?=.*?ee)(?=.*?i.*i)'

否则,您可以改用以下 ERE 模式:

[^ ]*(i[^ ]*ee[^ ]*i|i[^ ]*i[^ ]*ee|ee[^ ]*i[^ ]*i)[^ ]*

它匹配符合这三种模式之一的单词:

  • 该词包含一个 i 后跟两个连续的 e 后跟另一个 i
  • 该单词包含一个 i 后跟另一个 i 后跟两个连续的 e
  • 该单词包含两个连续的 e 后跟一个 i 后跟另一个 i

推荐阅读