regex - 正则表达式 "all three in any order and nothing more"

标签 regex

我需要制作一个符合以下条件的正则表达式:

1) 只有三个单词才算数学 2)不分开或用分号(;)隔开 3)以任何顺序 4) 必须包含所有的单词,否则匹配不上

我试过这个:

^(?=(.*;|)one)(?=(.*;|)two)(?=(.*;|)three).*$

但它以某种方式计算变体,例如 oneasfafasfsaf;two;three 这是错误的

请帮忙!

附言有时需要三个以上,但我想了解核心

最佳答案

你可以 capture所有 3 并检查每个是否存在,然后,如果字符串仅由 3 个单词组成:

^(?=.*?(one))(?=.*?(two))(?=.*?(three))(?:(?:\1|\2|\3);?){3}$

参见 test at regex101.com (右边的解释); Regex FAQ

关于regex - 正则表达式 "all three in any order and nothing more",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26238467/

相关文章:

javascript - 正则表达式:在正则表达式中搜索相同的值

regex - 使用 Perl 提取方括号 "[]"之间的数据

python - 跨多行贪婪分割

java - 我如何使用正则表达式来实现包含功能?

javascript - 增加页面上所有数字的字体大小(Javascript、JQuery、DOM 操作)

javascript - 在 javascript 字符串搜索中查找整个单词而不是单词的一部分

python - numpy 的一维高级​​索引语法的正则表达式 - 如何处理可选的尾随逗号

ruby-on-rails - Rails 有标准的正则表达式验证器吗?

php - 正则表达式提取第二个破折号/连字符之前的所有字符

php - 如何验证一个字符串只包含小写字母?