Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

正規表現について

正規表現の中で、「^」は文字列の先頭を表すと思います。
例えば、「^a」だと、「aで始まる文字列」という意味になると思います。
しかし、実際に試してみたところ、正規表現の「^a」では、文字列"ab"とはマッチしません。
なぜでしょう・・・

色々と自分なりに調べてみたところ、下記のサイトにたどり着きました。
http://www.site-cooler.com/java/j2se/regex.htm#3

こちらのサイトさんの
【Javaでの使い方「マッチする文字列を検索」】
という項目のところで、正規表現「^Hello」で、「Hello」で始まる文字列というマッチングをされています。
そして、"Hello World. This is regex sample."という文字列とマッチングさせ、結果はtrueになると。
しかし、私が全く同じソースを実行しても結果はfalseになります。
何か環境がおかしいのでしょうか??
jdkは5.0を使用しています・・・。

よろしくお願いします。

7

回答

5447

閲覧

7件の回答

評価

0

どんなコードを書いているのか知らないけど、
find()とmatches()の区別はついているんだろうね。

評価

0

matchesメソッドは、領域全体とマッチングしますよね。
その場合、正規表現の「^」は意味をなさないんでしょうか??


String str = "ab";
System.out.println(Pattern.matches("^a", str));

として、aから始まる文字列でマッチングしたいのですが、結果はfalseになります。

評価

0

自分でも書いてるでしょ。

「領域全体」

つまり、この目的の場合は、"^a"と"^a$"は同値なのだ。

では、"^a$"は"ab"とマッチするかな?
マッチさせるには、どんなパターンが必要になると思う?

評価

0

「目的」よりも「やり方」の方がいいかなあ。うーむ。

評価

0

ああそうか、目的とやり方が合致してないから困ってるんだよな。

評価

0

つーことで、以下のように修正願います。m(_ _)m

つまり、このコードのやり方では、"^a"と"^a$"は同値なのだ。

評価

0

マッチさせるならば、findメソッドやlookingAtメソッドを使えば可能ですよね。
matchesメソッドだと、"^a$"と同値になってしまうんですか・・・
やはり最初の投稿で書いたサイトさんのところは間違っているということになりますね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。