组合中的单词匹配

时间:2014-05-01 14:20:54

标签: regex wildcard

为了成功解析,我需要满足两个条件。我在第一个条件-1中使用以下模式当前用于多个单词匹配:

^(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bid\b).*$

condition-2 上,我希望此模式能够与另一种模式结合使用。

(适用= \ bfor |的|从\ B') (= \ B(:???产品|事?|??项目)\ b)中(= * \出价\ b)中

因此,如果(?=.*\bfor|of|from\b)本身匹配,则用户将收到您忘记输入内容的错误(即内容ID等)

如果这也可以按相反的顺序工作:

所以,如果(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bid\b)本身匹配,则用户会收到错误消息,表示您错过了(?=。* \ bfor | of | from \ b)`

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在使用编程语言。利用它不是更有意义吗?怎么样:

Match has_for_of_from = Regex.Match(input, @"\b(for|of|from)\b");
Match has_good_thing = Regex.Match(input, @"\b(?:good|thing|item)s?\b");
Match has_id = Regex.Match(input, @"\bid\b");
if (has_for_of_from && not (has_good_thing && has_id)) {
  // error about missing items/id
}
if (has_good_thing && has_id && not has_for_from) {
  // error about missing for/of/from
}

我将可选的s移到了交替之外(使其更容易阅读但仍然做同样的事情)。我从描述中不确定逻辑是否正是你想要的(如果第一个条件说has_for && not (has_good || has_id)?),但我相信你可以从这里弄明白。

你需要一个非常混乱的正则表达式才能在一次匹配中执行此操作,并且它不一定表明哪个条件触发了该问题,因此您将不会收到信息性错误消息。

免责声明:我不知道,因此我的语法可能略有偏差。