0

String.matches異なる結果が得られます(正当な理由があると思いますが、理由はわかりません)。

以下の私の例を参照してください。

複雑なプログラム:

...
line.matches(pattern) -> false
...

簡単なプログラム:

String line = "blabla"; //copy pasted during debug of Complex program
String pattern = "bl.*"; //copy pasted during debug of Complex program

line.matches(pattern) -> true

Q:コンプレックス プログラムで一致が正しくない原因を特定するにはどうすればよいですか?

4

1 に答える 1

11

おそらくあなたは、Java の動作方法にとらわれたもう 1 人のプログラマーである可能性が非常に高く、.matches()多くの人がそのメソッドの名前を間違った名前だと考えるようになりました。

これを読んで、赤い鉄を使ってこれを頭に刻み込んでください。

Java のメソッドは、引数として指定された正規表現が入力開始アンカーと入力終了アンカー.matches()で囲まれているかのように動作します。その結果、入力全体で正規表現を試行して一致させます。^$

これは、正規表現を使用する大多数のプログラミング言語で採用されている「正規表現マッチング」の定義とは異なります (そして、あなたの言語もこれに完全に同意します) 。以下の多くのコメントからわかるように、他の人は同意しません。

あれは:

"foobar".matches("foobar") == true
"foobar and something else".matches("foobar") == false

Java での実際の正規表現マッチングは、.find();を使用して行われます。そしてStringそれを持っていません。Patternaと aを使用する必要がありMatcherます。

final Pattern p = Pattern.compile("foobar");
final Matcher m = p.matcher("foobar and something else");
m.find(); // true!
m.matches(); // false!

つまりmatches()、実際にパターンを使用します"^foobar$"

于 2013-06-11T12:36:48.443 に答える