簡體   English   中英

在與數字相鄰的Java正則表達式中使用反向引用

[英]Using backreferences in java regular expressions adjacent to digits

我想使用帶有正向引用的regexp替換如果目標字符串如下所示:

"$1 123"

一切正常。 但是如果我想要一個目標字符串,例如:

"$1123"

它不會工作。

在perl中,您可以使用

"${1}123"

為了區分反向引用和相鄰數字-是否存在Java等效項?

編輯

如果具有以下格式的時間戳記

YYYYMMDDHHMMSS

喜歡:

20130811123000

我想重設小時,分鍾和秒以獲取

20130811000000

我想做的是

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

您需要將替換指定為:

"$1\\123"

$12將引用第12個組(如果存在),或者第一個組(如果少於12個反向引用)。

因此,在$1123如果僅捕獲了一個組, $11 $1如果捕獲$11以上的組, $11 ,依此類推

參考

看來逃脫工程。

看到這種情況:

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很可能會被解釋,並且為空。 在第二張照片中,在回溯到第1組后,我避免了替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM