String str = "3\r123u99"; String reg = ".\r.";
Matcher m1 = Pattern.compile(reg).matcher(str); while (m1.find()) { System.out.println(m1.group()); }
刚接触正则,这段正则的匹配结果让我不解啊
1
dallaslu 2019-10-27 16:11:53 +08:00
那么匹配结果是什么,以及你觉得应该是什么呢?
|
2
xjn17858906105 OP |
3
chengyiqun 2019-10-27 16:50:57 +08:00
你是在 windows 平台测试的吗?
|
4
xjn17858906105 OP @chengyiqun 我是在 mac 上测试的,用 idea,在控制台上打印
|
5
xjn17858906105 OP 刚刚 stackoverflow 上的老兄是这么回答的 https://stackoverflow.com/a/58577737/8432118
|
6
QiuSe 2019-10-27 17:26:50 +08:00 1
@xjn17858906105 这个解释不是很好吗?
如果你想输出你要的结果,String str = "3\n123u99"; String reg = ".\n.";就是你要的。 想知道为什么\r 不行, 你只需要在 main 方法里写 System.out.println("ww3\r123u99"),不写其他的代码,这个是控制台的规定吧。 |
7
ipwx 2019-10-27 18:11:50 +08:00 via Android
因为控制台里面 \r 等于回到行首重新开始输出啊。不信你 replace \r 为 \\r
|
8
szq8014 2019-10-27 19:22:19 +08:00 3
你遇到了著名的文件换行符问题。
\r\n 分别是把光标挪到行首与换行。 只写\r 就只是把兴标挪到了行首,输出的字符会覆盖原来的,用这个特性可以做控制台的基于字符的下载进度条。 按照标准来的话,只写 \n 效果应该是 12345 _____67890 这样的,不过不会这样的 |
9
m1ch3ng 2019-10-27 22:56:17 +08:00
匹配的是 3\r1,然后因为是 syso 输出,遇到\r 会光标移到行首,所以输出 1 ?
|
10
xjn17858906105 OP @m1ch3ng 是的,我试验过了,也确实如此
|