鉴于以下数据
"apple orange plum"
"apple grape plum"
我将有一个给定的术语,它将决定某些东西是否匹配。
例如“苹果橙梅梨樱桃”我需要写一个正则表达式,它匹配[1.]而不是[2.],因为我的术语不包含“grape”
我不知道正则表达式是否可行?
答案 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)(?: |$))+)$
<强>解释强>
(apple|orange|plum|pear|chery)
任何这些词
(?: |$)
non capturing group