正则表达式匹配由空格分隔的特定单词

问题描述 投票:0回答:1

我有一个包含 5 个单词的列表(foo、bar、foobar、footable、somebar)。该单词列表将以字符串形式提供,每个单词以空格分隔并以任意顺序。我需要一个符合以下要求的正则表达式

  1. 输入的字符串只能包含上述5个单词
  2. 每个单词之间用空格分隔
  3. 每个词只能出现一次
  4. 正则表达式应该匹配整个字符串 - 如果任何部分与上述条件不匹配,则匹配失败

到目前为止我有这个

(\b(foo|bar|foobar|footable|somebar)\b\ *){1,5}

  1. 仅匹配提到的单词
  2. 单词之间用空格分隔

需要第三个和第四个要求的解决方案

  1. 每个词只能出现一次
  2. 正则表达式应该匹配整个字符串 - 如果字符串的任何部分与上述条件不匹配,则应该是失败的匹配
regex grep
1个回答
0
投票

从精确匹配 5 个单词的正则表达式开始:

^(?:\w+\s+){4}\w+$

然后在其前面加上与每个单词匹配的前瞻。

(?=.*\bfoo\b)(?=.*\bbar\b)(?=.*\bfoobar\b)(?=.*\bfootable\b)(?=.*\bsomebar\b)^(?:\w+\s+){4}\w+$

演示

© www.soinside.com 2019 - 2024. All rights reserved.