Regex 正则表达式查找匹配3个术语的任意组合
我需要设计一个正则表达式,它将匹配n个单词的任何组合,没有重复 例如,单词Regex 正则表达式查找匹配3个术语的任意组合,regex,Regex,我需要设计一个正则表达式,它将匹配n个单词的任何组合,没有重复 例如,单词“她”“是”“快乐”的正则表达式将匹配“她是快乐的”,“她是快乐的”,但不匹配“她是快乐的”或“她是快乐的” 我可以用正则表达式来做这件事吗?我应该使用自定义算法吗 这场比赛她很高兴但不重复单词: ^(?=(?:(?!\bshe\b).)*\bshe\b(?:(?!\bshe\b).)*$)(?=(?:(?!\bis\b).)*\bis\b(?:(?!\bis\b).)*$)(?=(?:(?!\bhappy\b).)*\b
“她”
“是”“快乐”的正则表达式将匹配“她是快乐的”
,“她是快乐的”
,但不匹配“她是快乐的”
或“她是快乐的”
我可以用正则表达式来做这件事吗?我应该使用自定义算法吗 这场比赛
她很高兴
但不重复单词:
^(?=(?:(?!\bshe\b).)*\bshe\b(?:(?!\bshe\b).)*$)(?=(?:(?!\bis\b).)*\bis\b(?:(?!\bis\b).)*$)(?=(?:(?!\bhappy\b).)*\bhappy\b(?:(?!\bhappy\b).)*$).*$
让我们来解释第一部分(即(?=(?:(?!\bshe\b)。*\bshe\b(?:(?!\bshe\b)。)*$)
)
这确保短语中有且只有一个“她”
(?= # start lookahead
(?: # non capture group
(?!\bshe\b) # negative lookahead, make sure we don't have "she"
. # any character
)* # end group, may appear 0 or more times
\bshe\b # literally "she" surounded by word boundaries
(?: # non capture group
(?!\bshe\b) # negative lookahead, make sure we don't have "she"
. # any character
)* # end group, may appear 0 or more times
$
)
其他单词“is”和“happy”的解释是一样的。是否必须用RegEx来完成?我也同意@WaiHaLee的观点,它只是获取输入文本的单词列表,并检查列表是否包含所有必需的术语,而不是。我只是觉得正则表达式引擎可能比我写的任何东西都更有效率。我的退路是自己做。