You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写正则表达式匹配不重复指定单词的完整空格分隔字符串

解决指定单词的唯一出现匹配正则表达式问题

需求回顾

  • 输入字符串只能包含以下5个单词:foo、bar、foobar、footable、somebar
  • 单词之间必须用空格分隔
  • 每个单词仅能出现一次
  • 必须匹配整个字符串,不符合条件则直接匹配失败

原有正则的不足

你提供的正则(\b(foo|bar|foobar|footable|somebar)\b\ *){1,5}只能满足前两项要求,无法限制单词重复出现,也没有锚定整个字符串,会出现部分匹配的无效情况。

最终解决方案正则

^(?!.*\b(foo|bar|foobar|footable|somebar)\b.*\b\1\b)(?:\b(foo|bar|foobar|footable|somebar)\b\ *){1,5}$

正则拆解说明

  • ^ 和 $:分别锚定字符串的开头和结尾,确保正则匹配的是整个字符串,杜绝部分匹配的问题
  • (?!.*\b(foo|bar|foobar|footable|somebar)\b.*\b\1\b):正向否定预查逻辑,用来禁止单词重复。它会扫描整个字符串,一旦发现任意指定单词出现两次,直接判定匹配失败。其中\1是引用前面捕获到的单词,用来对比是否重复
  • (?:\b(foo|bar|foobar|footable|somebar)\b\ *){1,5}:匹配1到5个指定单词,每个单词后跟任意数量的空格(兼容可能的末尾空格),\b确保匹配的是完整单词,避免出现类似foobar被误拆成foo+bar的错误匹配

如果需要严格限制单词间只能有单个空格,且字符串结尾不能有空格,可以使用下面的正则:

^(?!.*\b(foo|bar|foobar|footable|somebar)\b.*\b\1\b)(?:\b(foo|bar|foobar|footable|somebar)\b(?: |$)){1,5}$

内容的提问来源于stack exchange,提问作者Akhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:27:49