我正在寻找一个正则表达式,它只会给我包含我指定的字母的单词,匹配单词的长度应该与指定的字符数相同。
因此,如果我给出OMHE
字母,它应该只匹配包含这些字母的单词,只包含这些字母以及字母序列中字母出现的次数
到目前为止我的正则表达式是这个具体的例子(否则我动态构建正则表达式)......
.*?[O{1}M{1}H{1}E{1}]{4}
它确实在某种程度上起作用,但我确实得到了一些不应该匹配的词。
与示例匹配的字词为HOME
,但MEMO
和HOMEE
不应。当谈到正则表达式时,我真的很糟糕:(
答案 0 :(得分:4)
答案 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 )