5

问题:

  1. 匹配正则表达式的每个字符最多出现一次的单词。

  2. 单词必须有一定的大小,比如说“{2,5}”

  3. 一个特定的字符必须在单词中,比如说 char "e"

我有什么:

word.matches("^[abcde]{2,5}$");

这匹配字符 a、b、c、d 和 e 出现 0..5 次的所有单词。因此,即使“abba”两次使用字符“b”而“dead”两次使用字符“d”,单词“abba”和“dead”也会匹配。如果字符“e”在单词中,表达式也会忽略。

我想要的是一个匹配,其中每个字符最多使用一次,单词长度为 2-5 个字母,字符“e”在单词中。例如,合法匹配将是“珠子”,因为每个字符最多使用一次,并且字符“e”在单词中。

4

1 回答 1

11

您可以使用如下表达式:

^(?=[abcd]*e)(?:([abcde])(?![abcde]*?\1)){2,5}$

一些评论:

^
(?=[abcd]*e)     # make sure there is an "e"
(?:
  ([abcde])      # match a character and capture it
  (?!            # make sure it's not repeated
    [abcde]*?
    \1           # reference to the previously matched char
  )
){2,5}
$
于 2013-07-29T20:07:10.227 回答