2

このタイプの質問がここにたくさん投稿されると確信しています。私はこの正規表現を持っています:

^\[.*\]

どちらが一致する必要があります

[Test]Hi there

そしてRegexPalによると、そうです。ただし、この Java SCCE では次のことは行いません。

final String pat = "^\\[.*\\]";
final String str = "[Test]Hi there";
System.out.println(pat);
System.out.println(str);
System.out.println(str.matches(pat));

出力:

^\[.*\]
[Test]Hi there
false

なぜ一致しないのですか?

4

2 に答える 2

10

Java の「一致」は、「文字列全体に一致する」ことを意味します。

領域全体をパターンと一致させようとします。

正規表現は最後の文字を受け入れないため、.]の後に文字があるものには「一致」しません]

を使用して、正規表現に一致するものがfind文字列に含まれ^ているかどうかを確認できます ( を使用しているため、先頭に固定する必要があります)。

つまり、一致^\[.*\]しませ が、内で見つかります。 [Test]Hi there [Test][Test]Hi there

于 2012-09-12T08:39:57.040 に答える
1

String#match文字列全体に対して正規表現を照合しようとするためです。探しているのは です。MatcherPattern.compile(pat).matcher(str).find()を参照してください。

于 2012-09-12T08:42:44.963 に答える