1 名前:Javaが初心者 mailto:sage [2008/05/12(月) 03:05:27 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド114【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1207385614/ 次スレは>>990 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/
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.代理レスでの書き込みなので、返信が遅れるかもしれません。
912 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 18:54:29 ] java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html >文字クラス >[abc] a、b、または c (単純クラス) >[^abc] a、b、c 以外の文字 (否定) >[a-zA-Z] a 〜 z または A 〜 Z (範囲) >[a-d[m-p]] a 〜 d、または m 〜 p:[a-dm-p] (結合) >[a-z&&[def]] d、e、f (交差) >[a-z&&[^bc]] b と c を除く a 〜 z:[ad-z] (減算) >[a-z&&[^m-p]] m 〜 p を除く a 〜 z:[a-lq-z] (減算) > 文字クラス演算子は、次の順で優先順位が高くなります。 > 1 リテラルエスケープ \x > 2 グループ化 [...] > 3 Range a-z > 4 論理和 [a-e][i-u] > 5 論理積 [a-z&&[aeiou]] これを見る限り、 [α-ω[...]] はともかく、 [[...]α-ω] の形がどうなるのかは書かれていない(=例外でもおかしくない?)ように見えるけど、どう? >正規表現構文の動作の詳細については、『Mastering Regular Expressions, 2nd Edition』 > (Jeffrey E. F. Friedl 著、O'Reilly and Associates、2002 年) を参照してください。 だそーですが