Pattern.matches(String) は頭から尻まで一致したときに true
/a/ =~ "back" #=> true
と同じことを Java でしたくて、
Pattern.matches( "a", "back" ); //=> false
これが true になぜならんと1日悩んでたんだけど、これは次のコードと同値だった。
Pattern.compile( "^a$" ).matcher( "back" ).matches();
じゃあ、Pattern.matches の Javadoc にはどう書いてあるかって言うと、
matches
public static boolean matches(String regex, CharSequence input)
ってわけなので、Matcher#matches() を見ると、
matches
public boolean matches()
領域全体をこのパターンとマッチします。
マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。
- 戻り値:
- 領域シーケンスの全体がこの正規表現エンジンのパターンとマッチした場合にのみ true
この、「領域シーケンスの全体」っていうのが、正規表現の ^ と $ を含むってことみたい。
分かりにくいね。
matches() じゃなかったら何を使うのかって言うと find() を使う。
ちなみに Matcher#find() は、
find
public boolean find()
「部分シーケンスが…」ってあるので、こっちは部分マッチで true 。
つまり、最初に掲載した、
/a/ =~ "back" #=> true
と同じ動作をするコードは、
Pattern.compile( "a" ).matcher( "back" ).find()
でした。