Java正则表达式与UTF-8字符串

3

我有两个字符串:

字符串1来自文本文件,使用BufferedReader打开,编码为"UTF-8":

Tân_Dậu 1921 – Kỉ_Mão 1999

String 2 是我的类型:

Tân_Dậu 1921 - Kỉ_Mão 1999

和我的字符串模式:

[(]?([A-ZTĐẤ][a-záââậầấẹịỉìíợnọúùửỵýỷ]+[_][A-ZDĐẤ][a-záậãâậầấẹuịìíợọúùửỵýỷ]+)?[ ]?((\\d{4})|([?]))[ ]?[-][ ]?(([A-ZĐKẤ][a-záâỉoậầấẹịỉìíợọúùửỵýỷ]+[_][A-ZĐẤ][a-záãâậầấãẹịìíợọúùửỵýỷ]+))?[ ]?(\\d{4}|\\d{2}[)])[ ]?[)]?

我使用:
Matcher m = p.matcher(test.trim());
while(m.find())
{
    System.out.println("-->"+m.group());
}

有两个字符串,分别为“test”和“string 1”。但只有字符串2匹配成功。出了什么问题,如何解决?谢谢帮助。


请阅读格式帮助 - 使用Markdown编写而不是随意添加HTML标签,对于代码块,只需缩进4个字符即可。这将使帖子更易于阅读。 - Jon Skeet
1个回答

3
问题出在 - 上。你似乎有两个版本的它们。将你的表达式改为这样:[(]?([A-ZTĐẤ][a-záââậầấẹịỉìíợnọúùửỵýỷ]+[_][A-ZDĐẤ][a-záậãâậầấẹuịìíợọúùửỵýỷ]+)?[ ]?((\\d{4})|([?]))[ ]?[-–][ ]?(([A-ZĐKẤ][a-záâỉoậầấẹịỉìíợọúùửỵýỷ]+[_][A-ZĐẤ][a-záãâậầấãẹịìíợọúùửỵýỷ]+))?[ ]?(\\d{4}|\\d{2}[)])[ ]?[)]?就可以解决问题了(示例可在此处查看)。
请注意,[-] 已更改为 [-–]

谢谢帮忙,但是当我尝试获取两个字符串的十六进制值时,它们不相等,我认为问题在于读取文件文本时的编码。 - Thanh Nguyen
@ThanhNguyen:这些字符串不同,因此它们的十六进制值不匹配。在这种情况下,您需要做的是用“-”替换为“–”。如果您这样做,还可以使用相同的表达式而无需进行我推荐的更改。 - npinti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接