2011-09-14 20 views
1

は、私は時間のperlの、UNIXおよびJavaの正規表現の多くを使用一致しますが、私はそれについてJavaで驚いている:文字列が正規表現

"help".matches("^h") 

は偽です! Javaドキュメントから

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-

"trueの場合、および場合にのみ、この文字列は、指定した正規表現と一致する" 真のコースの

 "help".matches("^h.*") 

または

 "help".matches("^h.*$") 

リターンを。

私には驚くべきことがありますか?

+1

何が質問ですか?私たちは驚いていますか? – amit

+0

式は '' ^式$ "'として解釈され、その末尾に '$ 'が追加されているようです。私はまた、最初の例とのマッチを期待していました。 – Matteo

+0

Java正規表現はダムです。あなたは完全に正しいです。このメソッドはISが壊れています。ここで見てください:http://mentaregex.soliveirajr.com – TraderJoeChicago

答えて

1

"help"は、macth "^h"ではありません。 helpの最初の文字は、"^h"

+0

しかし、この場合、 '^'は役に立たなくなります。正規表現の始まりは常に '^'です:なぜそれはスペックにありますか? – Matteo

+0

'^'は常に正規表現の始まりであるかどうかはわかりません。例えば、 'help'の' el'部分が 'lp'式と一致します –

+0

' el'が 'lp'式とマッチすることはどういう意味ですか?私はいくつかのテストを行い、実際には文字列全体に一致する必要があるようです。 – Matteo

1

と一致します。Javaは、perlやrubyというよりも厳密です。それは文字列全体に一致するようにしようとしており、 "ヘルプ"には/^h /がマッチしない最後の余分な部分があります。 docsから

は、この文字列が、指定された正規表現と一致するかどうかを判定します。

文字列全体ではありません。

+0

しかし、この場合、それらが暗黙のうちに '^'と '$'を持つのはなぜですか? – Matteo

+0

マルチライン・モード、http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#MULTILINEは1つの状況です。 –

+0

私はそれがperlとして動作していると想像しましたが、実際には何もしません:-) MULTILINEのドキュメントでは、デフォルトではこれらの式は入力シーケンス全体の最初と最後に一致します。デフォルトのケースは言及されていますが、意味がありません... – Matteo