- 911 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:07:37 ]
- 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.代理レスでの書き込みなので、返信が遅れるかもしれません。
|

|