我在Ubuntu和Windows上运行完全相同的eclipse项目,但获得的输出不同。
以下代码中出现不均匀行为:
String regex = "<token id=\"(.*)\">.*\n.*<word>(.*)</word>.*\n.*<lemma>(.*)</lemma>.*\n.*\n.*\n.*<POS>(.*)</POS>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(fileAsString);
while (matcher.find()) {
...
}
(matcher.find())检查在Windows上返回false但在Ubuntu上返回true(这是预期的行为)。
Eclipse Juno和jdk7。也许它与操作系统没有关系,但这是我在并行调试之后找到的唯一不同之处,并且在两个环境中检查了项目的属性之后。
任何想法的差异???
答案 0 :(得分:4)
您正在匹配\n
,这是Linux的结尾,但不是Windows(Windows需要\r\n
)。像\r?\n
之类的东西可以解决您的具体问题。
也就是说,你永远不应该用正则表达式解析任何类似HTML的(包括XML)。你错过了XML所涉及的一切,其中最简单的就是手写“错误”的灵活性,如不同的标签顺序,空格等。
答案 1 :(得分:1)
这可能是行尾字符的差异。尝试将可选的\ r添加到正则表达式。
答案 2 :(得分:1)
很可能是因为行结尾。默认情况下,该点与行结尾不匹配,并且您在正则表达式中明确查找\n
。
尝试使用Pattern.DOTALL
编译您的模式,或将\r?\n
放在正则表达式\n
的任何位置。