7

私の学生(高校)は、アルファベット順に文字を含む単語に一致する正規表現について質問しました。正直なところ、そのような正規表現を作成する方法がわかりません。一致する単語の例、文字の大きさは関係ありません:

abc, aWZ, gOR, bor
4

3 に答える 3

18
^a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$

動作するはずです

于 2013-01-15T17:31:52.240 に答える
8

これはうまくいくはずです:

(?i)a*b*c*...z*

ループで構築するのは簡単です。

StringBuilder b = new StringBuilder(64);
b.append("(?i)");
for (int i = 'a'; i <= 'z'; i++) b.append((char)i).append('*');
return Pattern.compile(b.toString()).matcher(input).matches();
于 2013-01-15T17:27:48.553 に答える
2

これは、正規表現にとってはあまり良い問題ではありません。ほぼ間違いなく、for ループでチェックする方が簡単です。

import static java.lang.Character.isLetter;
import static java.lang.Character.toLowerCase;

public boolean alphabeticalOrder(String word) {
    for (int i = 0; i < word.length() - 1; i++) {
        if (!isLetter(word.charAt(i)) || 
                toLowerCase(word.charAt(i + 1)) < toLowerCase(word.charAt(i)))
            return false;
    }
    return isLetter(word.charAt(word.length() - 1));
}

または、次の正規表現も、 を渡すときに正しく一致します (ASCII アルファベット文字のみ) CASE_INSENSITIVE

^a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$
于 2013-01-15T17:40:32.000 に答える