5

問題:

  1. 正規表現の各文字が最大 1 回出現する単語に一致します。

  2. 単語は特定のサイズである必要があります。たとえば、「{2,5}」とします。

  3. 1 つの特定の文字が単語に含まれている必要があります。文字「e」としましょう。

私が持っているもの:

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

これは、文字 a、b、c、d、および e が 0..5 回出現するすべての単語に一致します。したがって、"abba" は文字 "b" を 2 回使用し、"dead" は文字 "d" を 2 回使用しますが、単語 "abba" と "dead" は一致します。この式は、文字「e」が単語に含まれている場合も無視します。

私が欲しいのは、各文字が最大1回使用され、単語の長さが2〜5文字で、文字「e」が単語に含まれる一致です。たとえば、各文字が最大 1 回使用され、文字「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 に答える