Java Matcher在Ubuntu和Windows上给出了不同的结果
我在Ubuntu和Windows上运行完全相同的eclipse项目,但得到不同的输出 不均匀行为发生在以下代码中:Java Matcher在Ubuntu和Windows上给出了不同的结果,java,regex,eclipse,nlp,stanford-nlp,Java,Regex,Eclipse,Nlp,Stanford Nlp,我在Ubuntu和Windows上运行完全相同的eclipse项目,但得到不同的输出 不均匀行为发生在以下代码中: String regex = "<token id=\"(.*)\">.*\n.*<word>(.*)</word>.*\n.*<lemma>(.*)</lemma>.*\n.*\n.*\n.*<POS>(.*)</POS>"; Pattern pattern = Pattern.compile(r
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()) {
...
}
String regex=“.*\n.*(.*)。*\n.*(.*)。*\n.*\n.*\n.*(.*)”;
Pattern=Pattern.compile(regex);
Matcher Matcher=pattern.Matcher(fileAsString);
while(matcher.find()){
...
}
(matcher.find())检查在Windows上返回false,但在Ubuntu上返回true(这是预期的行为)
在两者上都使用Eclipse Juno和jdk7
也许它与操作系统无关,但这是我在并行调试和在两个环境中检查项目属性后发现的唯一不同之处
有什么区别吗?可能是行尾字符的不同。尝试向正则表达式添加可选的\r。可能是行尾字符不同。尝试向正则表达式中添加可选的\r。很可能是因为行结束。默认情况下,点与行尾不匹配,您可以在正则表达式中显式查找
\n
请尝试使用
pattern.DOTALL
,或将\r?\n
放在正则表达式中\n
的任何地方。很可能是因为行尾。默认情况下,点与行尾不匹配,您可以在正则表达式中显式查找\n
请尝试使用
pattern.DOTALL
,或将\r?\n
放在正则表达式中\n
的任何地方。您匹配的\n
,这是Linux的行尾,而不是Windows(Windows需要\r\n
)。类似于\r?\n
的东西可以解决您的特定问题
也就是说,永远不要用正则表达式解析任何类似HTML(包括XML)的内容。您错过了XML所涉及的一切,尤其是它的灵活性和手写“错误”,如标记、空格等的不同顺序。您匹配的是
\n
,这是Linux的行尾,而不是Windows(Windows需要\r\n
)。类似于\r?\n
的东西可以解决您的特定问题
也就是说,永远不要用正则表达式解析任何类似HTML(包括XML)的内容。您错过了XML所涉及的一切,尤其是它的灵活性和手写“错误”,如标记、空格等的不同顺序。我想这可能会对您有所帮助:您能指定每台机器上使用的是哪种JDK吗?你在Ubuntu上使用openjdk吗?是的,我在Ubuntu上使用openjdk。我想这可能会对你有所帮助:你能指定每台机器上使用哪个JDK吗?你在Ubuntu上使用openjdk吗?是的,我在Ubuntu上使用openjdk。。