为了成功解析,我需要满足两个条件。我在第一个条件-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)`
提前致谢。
答案 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)
?),但我相信你可以从这里弄明白。
你需要一个非常混乱的正则表达式才能在一次匹配中执行此操作,并且它不一定表明哪个条件触发了该问题,因此您将不会收到信息性错误消息。