繁体   English   中英

(Java)如何在String.replaceAll()的“ replacement”参数中模拟正则表达式?

[英](Java) How to mimic a regex in the “replacement” argument of String.replaceAll()?

不用担心,我不是要您帮助我找到正则表达式!

我目前正在使用该方法

String.replaceAll(String regex, String replacement)

解析一行用户提供的数据并获取用户名。 我这样做是通过剥离除所需数据以外的所有内容,然后返回该数据。

假装

String rawTextInput = "Machine# 000111 
                       Password: omg333444"

我希望用户名是计算机号。 我的方法:

private String getUsername(String rawTextInput) {
    String username = rawTextInput.replaceAll("(.+#\\s\\d{6,6})", "(\\d{6,6})");
    return username;
}

第一个参数regex (。+#\\ s \\ d {6,6})正确标识原始输入的第一行Machine#000111

第二个参数/正则表达式(\\ d {6,6})正确隔离了我想要的数据000111

基本上,此方法告诉程序执行的操作是“找到带有Machine#000111的行,并将该行剥离为000111

实际产量

但是,我显然不正确地使用了ReplaceAll()的第二个参数,因为我要返回原义正则表达式

username = "(\\d{6,6})"

预期产量

代替

username = "omg333444"

在这里获取用户名的正确方法是什么? 有没有办法模仿ReplaceAll()的Replacement参数中正则表达式的存在?

请注意,此示例中的代码块具有重复的“ \\”字符,因为它们是IntelliJ IDEA中的转义字符。

实际上,IntelliJ会为replace选项执行此操作。 您可以通过按Ctrl + R(或您平台上的同等功能)并对其进行测试来进行测试。

答案是,在解析时会根据组的位置为组提供一个数字。 例如,您的当前正则表达式将被视为一个组,因为整个比赛过程中都有一组括号。 如果您将数字分为一个单独的组,则可以在替换组中使用。 您的新正则表达式可能如下所示:

.+#\\s(\\d{6,6})

这样,数字在第一组中被隔离。

然后,通过组的位置和前面的$来表示组。 因此,您的新替换项将如下所示:

String username = rawTextInput.replaceAll(".+#\\s(\\d{6,6})", "$1");

有关替换字符的更多信息,请参见此线程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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