1

私は正規表現(およびJava)に慣れていないので、これはおそらく簡単な質問です。行末の文字{を一致させようとしています。私の試みは単純にこれです:

row.matches("{$")

row.matches("\{$")

しかし、両方ともただ与える

スレッド「メイン」の例外java.util.regex.PatternSyntaxException:不正な繰り返し

私は何が間違っているのですか?

4

4 に答える 4

4
row.matches("^.*\\{$");

{はメタ文字なので、単に{をエスケープする必要があります。Javaは特別なコンテキスト(\ n、\ rなど)用に1つの円記号を予約しているため、パターン用に1つの円記号を生成するには2つの円記号が必要です。したがって、

\\{

適切に評価します

\{

これだけでなく、matchesメソッドは、サブセットだけでなく、文字列全体が一致するかどうかを確認します。したがって、^.*一部

于 2013-02-12T15:20:32.903 に答える
2

{文字は正規表現の特殊文字であるため、エスケープする必要があります

row.matches("\\{$")
于 2013-02-12T15:21:05.480 に答える
2

アングルブラケットの脱出は機能しましたか?

のように\\{$

に対してそれを試した

hello world{
    whatever{
    hello{dontmatch
    }
}

一致world{しましたが、一致しwhatever{ませんでしたhello{dontmatch

于 2013-02-12T15:22:56.600 に答える
2

をでエスケープする必要がありますが{、が特殊文字として読み取られる\のを防ぐために(改行の場合のように)、次の結果を追加してもエスケープする必要があります。\{\n\\

row.matches("\\{$");
于 2013-02-12T15:26:51.873 に答える