当前位置: 首页 > 知识库问答 >
问题:

如何创建具有多个条件的正则表达式

单于帅
2023-03-14

我需要扫描日志文件以找到一些子字符串。

如何在单个正则表达式中组合以下条件:

  • 查找子字符串“AAA”、“BBB”、“CCC”,但

我尝试了类似(?DDD | EEE | FFF)(AAA | BBB | CCC)的东西,但没有成功。

Java模式类应该支持正则表达式语法。

非常感谢。

共有1个答案

子车海
2023-03-14

我想到了这个:

(?!.*?(DDD|EEE|FFF).*?)(?<!(DDD|EEE|FFF))(AAA|BBB|CCC)

使用这些测试用例,它似乎是有效的:

123AAA //matches
123BBB //matches
123CCC //matches
123DDD //no match
123EEE //no match
123FFF //no match
AAADDD //no match
EEEBBB //no match

说明:如果字符串中有“DDD”、“EEE”或“FFF”,则不匹配。

如果在匹配的子字符串之前有“DDD”、“EEE”或“FFF”,则不匹配。(我不知道为什么需要这样做。如果我忽略它,“EEEBBB”会得到匹配,我认为不应该。我需要弄清楚这一点。)

更新:我认为我需要否定的后视,因为我没有考虑子串匹配在行内发生的上下文。

以下是一个不需要负面查找的版本:

(?!^.*?(DDD|EEE|FFF).*?$)(?:^.*?(AAA|BBB|CCC).*?$)

似乎有效,因为我在考虑整条线路。

另一个更新。(不能让它一个人。)这是优化了一点:

(?!^.*?(?:DDD|EEE|FFF).*$)^.*?(AAA|BBB|CCC).*$
 类似资料:
  • 问题内容: 我想所有和来自ID,是否有类似的东西而言,其与正则表达式的作品或有任何其他方式?否则,我将不得不针对每个项目(例如000ANT和0BBNTA)查询elasticsearch。请帮忙。 以下是我要尝试的一些东西,即1,但我也想有一个or条件,以便正则表达式也可以匹配。 问题答案: 使用而不是:

  • 问题内容: 我有一个表,其中存储了某些单词或单词组。我想选择以大写字母开头,没有空格且仅包含字母的条目。我的SQL看起来像这样: 我如何使用条件来做同样的事情? 问题答案: 尝试这个:

  • 问题内容: 我正在尝试解析标准输入,并提取与特定模式匹配的每个字符串,计算每个匹配的出现次数,并按字母顺序打印结果。这个问题似乎很适合Streams API,但是我找不到从Matcher创建匹配流的简洁方法。 我通过在匹配项上实现迭代器并将其包装到Stream中来解决此问题,但是结果不是很可读。如何在不引入其他类的情况下创建正则表达式匹配流? 问题答案: 很好,在Java 8中,它将提供由 定界符

  • 我正在尝试创建一个不允许某些字符串以“-”开头或结尾的regex表达式。到目前为止我已经尝试了这一个,但它在Safari上不起作用。

  • 我目前正在玩正则表达式,试图更好地理解它们,并且有一个我现在似乎正在努力的场景,因为我不知道这是否可以通过正则表达式来实现。 我有这样的文本字符串 该清单可能仍在进行中。我想匹配(选择)内部关键字之间的空格。因此,在第二行中,它将是和之间的空格。 和我能够匹配关键字中包含多个单词的行。将第一部分<代码>( 编辑:假设这些行之间还有一些其他文本,所以简单的< code>\b不能作为正则表达式使用。

  • 问题内容: 我试图做一个有条件的正则表达式,我知道堆栈溢出还有其他帖子,但是对这个问题太具体了。 如何创建仅在特定条件下才能匹配的正则表达式? 一个例子 例如,如果我们有一个字符串列表( 在java中 ): 并且我们只想匹配字符串末尾与开头相同数量的 在这个例子中我们想要什么 在此示例中,我们需要一个正则表达式来检查结尾处是否有与开始时相同数量的正则表达式。 条件部分 :如果开头有,则检查结尾是否