Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式读取字符串匹配器。匹配第一个字符串不正确匹配_Java_Regex - Fatal编程技术网

Java 正则表达式读取字符串匹配器。匹配第一个字符串不正确匹配

Java 正则表达式读取字符串匹配器。匹配第一个字符串不正确匹配,java,regex,Java,Regex,有人帮帮我吗 我有一个包含以下内容的文件 a // true тодорхойгүй гишүүн\n // false ямар нэг // false нэгэн // false a good deal // true нэлээн // false a long face // true у

有人帮帮我吗 我有一个包含以下内容的文件

a                       // true
тодорхойгүй гишүүн\n    // false
ямар нэг                // false
нэгэн                   // false
a good deal             // true
нэлээн                  // false
a long face             // true
уруу царай              // false
...
我的java代码

while ((strLine = br.readLine()) != null) { 
 // string from file

                Pattern pattern = Pattern.compile("[\\sa-zA-Z]{1,}");
                Matcher matcher = pattern.matcher(strLine);
                if (matcher.matches()) {
                    System.out.print(true+ "\n");
                } else {
                    System.out.print(false + "\n");
                    }
            }
输出

false // there is problem this line must true 
false
false
false
true
false
true
false
为什么第一次不匹配

I inserted blank line into start of file then output

false
true   // this line was false before i insert blank line
false
false
false
true
false
true
false

你试过[\sa-zA-Z]+

这很奇怪。您可能希望尝试使用hexdump仔细检查文件的前几行:

head -2 file | hexdump -C
这将准确地告诉您行的开头是什么字节。

前两行

a
тодорхойгүй гишүүн
六角堆

0000-0010:  ef bb bf 61-0d 0a d1 82-d0 be d0 b4-d0 be d1 80  ...a.... ........
0000-0020:  d1 85 d0 be-d0 b9 d0 b3-d2 af d0 b9-20 d0 b3 d0  ........ ........
0000-0029:  b8 d1 88 d2-af d2 af d0-bd                       ........ .

我通过删除前三个非ascii码解决了这个问题。

这与他使用的正则表达式完全相同。它不应该改变任何东西。是的。Java将通知“非法转义字符”。我认为在正则表达式中没有问题。前三个字符不是ASCII。你确定这真的是一个简单的文本文件吗?您是如何创建它的?这三个字节是UTF-8 BOM[]。Unicode联盟不鼓励使用它,但许多编辑器在将文件保存为UTF-8时(Windows记事本是最臭名昭著的例子)还是会插入它。[]这不是真正的解决方案,尽管这可能是您所能做的全部。如果您正在创建文件,请查看是否可以选择将其保存为UTF-8,而无需BOM(或某些应用程序称之为签名)。仅供参考,您可以将while循环中的所有代码替换为
System.out.println(strLine.matches(“[\\sa-zA-Z]+”)