不用担心,我不是要您帮助我找到正则表达式!
我目前正在使用该方法
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})正确标识原始输入的第一行 Machine#000111 。
第二个参数/正则表达式(\ d {6,6})正确隔离了我想要的数据 000111 。
基本上,此方法告诉程序执行的操作是“用 Machine#000111 查找行,并将该行剥离为 000111 。
实际输出
但是,我显然不正确地使用了ReplaceAll()的第二个参数,因为我要返回原义正则表达式
username = "(\\d{6,6})"
预期产量
代替
username = "omg333444"
在此处获取用户名的正确方法是什么?是否可以在ReplaceAll()的Replacement参数中模拟正则表达式的存在?
请注意,此示例中的代码块具有重复的“ \”字符,因为它们是IntelliJ IDEA中的转义字符。
答案 0 :(得分:1)
IntellIJ实际上是为replace选项执行的。您可以通过按Ctrl + R(或您平台上的同等功能)并对其进行测试来进行测试。
答案是,在解析时,会根据组的位置为其分配编号。例如,您的当前正则表达式将被视为一个组,因为整个比赛过程中都有一组括号。如果您将数字分为一个单独的组,则可以在替换组中使用。您的新正则表达式可能如下所示:
.+#\\s(\\d{6,6})
在那种情况下,数字在第一组中是孤立的。
然后,通过组的位置及其前面的$
来表示组。因此,您的新替换内容将如下所示:
String username = rawTextInput.replaceAll(".+#\\s(\\d{6,6})", "$1");
有关替换字符的更多信息,请参见this thread。