gpt4 book ai didi

java - '.' 何时在正则表达式中不匹配?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:00 26 4
gpt4 key购买 nike

我遇到了以下问题(已简化)。我写了以下内容

Pattern pattern = Pattern.compile("Fig.*");
String s = readMyString();
Matcher matcher = pattern.matcher(s);

在读取一个字符串时,匹配器无法匹配,即使它以“Fig”开头。我将问题追溯到字符串的下一部分中的流氓角色。它的代码点值 1633 来自

(int) charAt(i)

但与正则表达式不匹配。我认为这是由于输入过程中某处的非 UTF-8 编码所致。

Javadocs说:

Predefined character classes. Any character (may or may not match line terminators)

大概这不是严格意义上的字符,但它仍然是字符串的一部分。如何检测此问题?

更新:这是由于 (char)10 不容易被发现。我上面的诊断是错误的,下面的所有答案都与所问的问题相关并且很有用。

最佳答案

检查这个很容易:

import java.util.regex.*;

public class Test {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".");
for (char c = 0; c < 0xffff; c++) {
String text = String.valueOf(c);
if (!pattern.matcher(text).matches()) {
System.out.println((int) c);
}
}
}
}

在我的盒子上,输出是:

10
13
133
8232
8233

其中,10 和 13 分别是“\n”和“\r”。 133(U+0085)是“下一行”,8232(U+2028)是“行分隔符”,8233(U+2029)是“段落分隔符”。

注意:

  • 这不会测试基本多语言平面之外的任何 Unicode 字符
  • 它只使用默认选项
  • 这似乎与您对角色 1633 (U+0661) 的体验相矛盾

关于java - '.' 何时在正则表达式中不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16150214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com