简体   繁体   中英

how can I use backslash to backreference regex groups in java replaceAll()

for example:

String s = "1/14/2017".replaceAll("^(\\d{1,2})/(\\d{1,2})/", "$2/$1/");

this Java code will switch the place of '1' and '14'.

but The form that i want is below, unfortunately Java not supported this form

String s = "1/14/2017".replaceAll("^(\\d{1,2})/(\\d{1,2})/", "\2/\1/");

Is there any other tool can support this form?

You can't do that. And although it is not processed as back references by the regex engine it is first a feature of the encoding of characters in a string.

If the engine supported it, you would need to encode it as \\\\2/\\\\1/ (or the real ugly \\\62\\\61 ) because \ is the String escape character and what follows is taken to be raw input. So System.out.println("\101") would print the letter A .

But then the engine doesn't support the aforementioned alternative encoding because then the replacement pattern is taken to be just a String of "\2/\1/" which isn't what you want.

I would imagine the $ was chosen as it has no special meaning outside of a regular expression and is an easier way to encode a back reference indicator than escaping backslashes. But I have no evidence to support that reasoning.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM