(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;
}
第一个参数,正则表达式 (.+#\s\d{6,6}) 正确识别原始输入的第一行,机器# 000111。
第二个argument/regular表达式(\d{6,6})正确隔离了我想要的数据,000111 .
基本上,此方法告诉程序要做的是“找到带有 Machine# 000111 的行并将该行剥离为 000111.
实际产量
但是,我显然错误地使用了 ReplaceAll() 的第二个参数,因为我要取回文字正则表达式
username = "(\d{6,6})"
预期输出
而不是
username = "omg333444"
这里获取用户名的正确方法是什么?有没有办法在 ReplaceAll() 的替换参数中模拟正则表达式的存在?
请注意,此示例中的代码块具有重复的“\”字符,因为它们是 IntelliJ IDEA 中的转义字符。
IntellIJ 实际上为替换选项做了这个。您可以通过按 Ctrl+R(或您平台上的等效项)并使用它来测试它。
答案是,组在解析时会根据其位置获得一个编号。例如,您当前的 Regex 将被视为一组,因为整个匹配项周围有一组括号。如果您将数字隔离在其自己单独的组中,您将能够在替换中使用它。您的新正则表达式可能如下所示:
.+#\s(\d{6,6})
因此,第一组中的数字是孤立的。
组然后由其位置和前面的 $
表示。所以你的新替换看起来像这样:
String username = rawTextInput.replaceAll(".+#\s(\d{6,6})", "");
有关替换字符的更多信息,请参见 。
别担心,我不是要你帮我找正则表达式!
我目前正在使用该方法
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;
}
第一个参数,正则表达式 (.+#\s\d{6,6}) 正确识别原始输入的第一行,机器# 000111。
第二个argument/regular表达式(\d{6,6})正确隔离了我想要的数据,000111 .
基本上,此方法告诉程序要做的是“找到带有 Machine# 000111 的行并将该行剥离为 000111.
实际产量
但是,我显然错误地使用了 ReplaceAll() 的第二个参数,因为我要取回文字正则表达式
username = "(\d{6,6})"
预期输出
而不是
username = "omg333444"
这里获取用户名的正确方法是什么?有没有办法在 ReplaceAll() 的替换参数中模拟正则表达式的存在?
请注意,此示例中的代码块具有重复的“\”字符,因为它们是 IntelliJ IDEA 中的转义字符。
IntellIJ 实际上为替换选项做了这个。您可以通过按 Ctrl+R(或您平台上的等效项)并使用它来测试它。
答案是,组在解析时会根据其位置获得一个编号。例如,您当前的 Regex 将被视为一组,因为整个匹配项周围有一组括号。如果您将数字隔离在其自己单独的组中,您将能够在替换中使用它。您的新正则表达式可能如下所示:
.+#\s(\d{6,6})
因此,第一组中的数字是孤立的。
组然后由其位置和前面的 $
表示。所以你的新替换看起来像这样:
String username = rawTextInput.replaceAll(".+#\s(\d{6,6})", "");
有关替换字符的更多信息,请参见