1

我在 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 都在上面。

也许它与操作系统无关,但这是我在并行调试和检查两个环境中的项目属性后发现的唯一不同..

任何想法的差异???

4

3 回答 3

4

您正在匹配\n,这是 Linux 的行结尾,但不是 Windows(\r\nWindows 需要)。类似的东西\r?\n可以解决您的特定问题。

也就是说,您永远不应该使用正则表达式解析任何类似 HTML 的内容(包括 XML)。您错过了 XML 的所有内容,尤其是它在手写“错误”方面的灵活性,例如不同的标签顺序、空格等。

于 2013-01-10T20:51:41.867 回答
1

这可能是行尾字符的差异。尝试将可选的 \r 添加到正则表达式。

于 2013-01-10T20:50:53.850 回答
1

很可能是因为行尾。默认情况下,点与行尾不匹配,您\n在正则表达式中明确查找。

尝试用 编译你的模式Pattern.DOTALL,或者把你所有的\r?\n地方都\n放在正则表达式中。

于 2013-01-10T20:51:12.803 回答