2

私は何時間もかけて、未知の数の連続した数字に一致する正規表現ステートメントを取得しようと試みてきました。[0-9]* または [\d]* は、Java の String.replaceAll を使用すると、正規表現と一致してはならない場所に置換文字列が追加されます。

例: 「This is my99String problem」という入力文字列がある場合、置換文字列が「~」の場合

これを実行すると

myString.replaceAll("[\\d]*", "~" )

また

myString.replaceAll("[0-9]*", "~" )

私の戻り文字列は "~T~h~i~s~ ~i~s~ ~m~y~~S~t~r~i~n~g~ ~p~r~o~b~l~e~ま~」

ご覧のとおり、数字は置き換えられていますが、文字の間に置換文字列が追加されているのはなぜですか。

「これは私の〜文字列の問題です」のように見せたい

私は何を間違っていますか、なぜJavaはこのように一致していますか。

4

2 に答える 2

9

\\d*0 個以上の数字に一致するため、空の文字列にも一致します。また、文字列内のすべての文字の前に空の文字列があります。したがって、それらのそれぞれについて、それを に置き換える~ため、結果が得られます。

\\d+代わりに使用してみてください。\\dまた、文字クラスに含める必要はありません。

于 2013-08-07T15:02:21.690 に答える
1
[\\d]*

0 個以上( で定義) に一致します*。したがって、文字列全体で一致を取得しています。使用する場合

[\\d]+

1 つ以上の数字に一致します。

ドキュメントから:

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times
于 2013-08-07T15:04:47.263 に答える