【初心者】Java質問・相談スレッド115【歓迎】

このエントリーをはてなブックマークに追加
911デフォルトの名無しさん
Javaのjava.util.regex.Patternの動作について質問です。
正規表現に文字クラス"[a-z0-9&&[3-8]c-h]"を与えたところ、
この文字クラスにマッチする文字は 'c'、'd'、'e'、'f'、'g'、'h'の6字になるんです。
これってどういう仕様なのでしょうか?
以下は、マッチする文字を表示するサンプルです。参考に他の文字クラスも表示していますが
"[a-z0-9&&[3-8]c-h]"を渡した場合の挙動だけが、なぜそうなるのか良くわからないのです。
-----
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
printMatchingChars("[a-z0-9&&[3-8]c-h]");
printMatchingChars("[a-z0-9&&[3-8][c-h]]");
printMatchingChars("[a-z0-9&&[3-8]&&[c-h]]");
}
private static void printMatchingChars(String regex) {
Pattern p = Pattern.compile(regex);
StringBuilder buf = new StringBuilder();
for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) {
if (p.matcher(new String(Character.toChars(cp))).matches()) {
buf.append((char) cp);
}
}
System.out.println(regex + ":" + buf + ':');
}
}
-----
出力結果
[a-z0-9&&[3-8]c-h]:cdefgh:
[a-z0-9&&[3-8][c-h]]:345678cdefgh:
[a-z0-9&&[3-8]&&[c-h]]::
P.S.代理レスでの書き込みなので、返信が遅れるかもしれません。