私の学生(高校)は、アルファベット順に文字を含む単語に一致する正規表現について質問しました。正直なところ、そのような正規表現を作成する方法がわかりません。一致する単語の例、文字の大きさは関係ありません:
abc, aWZ, gOR, bor
^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*$
動作するはずです
これはうまくいくはずです:
(?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();
これは、正規表現にとってはあまり良い問題ではありません。ほぼ間違いなく、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*$