我怎么写一个匹配的正则表达式

时间:2015-10-07 17:46:06

标签: regex

鉴于以下数据

  1. "apple orange plum"
  2. "apple grape plum"
  3. 我将有一个给定的术语,它将决定某些东西是否匹配。

    例如“苹果橙梅梨樱桃”

    我需要写一个正则表达式,它匹配[1.]而不是[2.],因为我的术语不包含“grape”

    我不知道正则表达式是否可行?

2 个答案:

答案 0 :(得分:1)

支持前瞻(Javascript,PCRE,Ruby,Java,Python)的语言可以使用它们以任何顺序测试行/字符串是否包含这些值:

^(?=.*\b(item1)\b)(?=.*\b(item2)\b)(?=.*\b(item3)\b)

对于[1.]数据,这变为:

^(?=.*\b(apple)\b)(?=.*\b(orange)\b)(?=.*\b(plum)\b)

您可以在regex101 here上看到这一点。

对于[2.]数据,这变为:

^(?=.*\b(apple)\b)(?=.*\b(grape)\b)(?=.*\b(plum)\b)

您可以在regex101 here上看到这一点。

当然,您不需要在前瞻中拥有捕获组。您可以简单地匹配这些项目(没有捕获组),然后在模式的末尾使用.*来匹配从行的开头到结尾:

^(?=.*\bapple\b)(?=.*\borange\b)(?=.*\bplum\b).*

关于regex101的注意事项但是您不再在MATCH INFORMATION下看到结果(没有捕获任何内容),但选择作为匹配的整行WAS是有效的。

答案 1 :(得分:1)

你可以使用

^(((apple|orange|plum|pear|chery)(?: |$))+)$

DEMO regex101

<强>解释

(apple|orange|plum|pear|chery)任何这些词

(?: |$) non capturing group