0

ターゲット文字列が次のような場合、後方参照で正規表現置換を使用したい:

"$1 123"

すべてがうまくいきます。しかし、次のようなターゲット文字列が必要な場合:

"$1123"

うまくいきません。

perlでは、使用できます

"${1}123"

後方参照と隣接する数字を区別するには - Java に相当するものはありますか?

編集

フォーマットのタイムスタンプがある場合

YYYYMMDDHHMMSS

お気に入り:

20130811123000

取得する時、分、秒をリセットしたい

20130811000000

私がやりたいことは

String newstring = timestamp.replaceFirst("(\\d{8}))\\d{6}","${1}000000");
4

3 に答える 3

2

置換を次のように指定する必要があります。

"$1\\123"
于 2013-08-12T05:59:21.550 に答える
1

$12存在する場合は 12 番目のグループを参照し、後方参照が 12 未満の場合は 1 番目のグループを参照します。

したがって、$1123 $11 つのグループのみがキャプチャされた$11場合、11 を超えるグループがキャプチャされた場合など

参照

于 2013-08-12T05:58:55.420 に答える
1

逃げ道が効くようです。

このケースを参照してください:

String input = "abcd";
System.out.println(input.replaceAll("(a)bcd(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?", "$1123"));
System.out.println(input.replaceAll("(a)bcd(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?(e)*?", "$1\\123"));

出力:

23
a123

この場合、後方参照されたグループ 1 と後方参照されたグループ 11 の間にあいまいさがあります。最初の印刷では、後方参照をエスケープしていないため、グループ 11 は解釈される可能性が高く、空です。2 番目の印刷では、グループ 1 への後方参照の後に置換をエスケープします。

于 2013-08-12T06:02:58.403 に答える