用于查找确切单词的正则表达式

时间:2015-05-22 17:13:57

标签: java regex

我正在寻找一个正则表达式,它只会给我包含我指定的字母的单词,匹配单词的长度应该与指定的字符数相同。

因此,如果我给出OMHE字母,它应该只匹配包含这些字母的单词,只包含这些字母以及字母序列中字母出现的次数

到目前为止我的正则表达式是这个具体的例子(否则我动态构建正则表达式)......

.*?[O{1}M{1}H{1}E{1}]{4}

它确实在某种程度上起作用,但我确实得到了一些不应该匹配的词。 与示例匹配的字词为HOME,但MEMOHOMEE不应。当谈到正则表达式时,我真的很糟糕:(

4 个答案:

答案 0 :(得分:4)

您可以使用这个基于前瞻性的正则表达式:

^(?=.*?O)(?=.*?M)(?=.*?H)(?=.*?E)[OMHE]{4}$

RegEx Demo

答案 1 :(得分:1)

您可以使用^(([OMHE])(?!.*\2)){4}$

它使用负面的前瞻性说法,即在捕获[OMHE]的每个匹配后,不允许其他出现的捕获文本。然后,需要重复四次。由于外部组仅用于定义重复,因此可以将其优化为非捕获组:

^(?:([OMHE])(?!.*\1)){4}$

很容易将其扩展为更多角色......

答案 2 :(得分:-1)

您可以使用此模式

(O|M|H|E){4}

答案 3 :(得分:-1)

如果你想让匹配移动到中,这是一种方法 字符串。

 # (?<!\S)([OMHE])(?!\1)([OMHE])(?!\1|\2)([OMHE])(?!\1|\2|\3)([OMHE])(?!\S)

 (?<! \S )
 ( [OMHE] )                    # (1)
 (?! \1 )
 ( [OMHE] )                    # (2)
 (?! \1 | \2 )
 ( [OMHE] )                    # (3)
 (?! \1 | \2 | \3 )
 ( [OMHE] )                    # (4)
 (?! \S )