Java正则表达式适用于Linux但不适用于Windows

时间:2016-03-02 12:10:14

标签: java regex

我构建了i个java类名Scanner。 该类打开文件并在其上应用三个正则表达式。

在我的Linux系统上,所有三种模式都运行良好。在Windows上只有两个,下班后我真的不知道为什么......

这是我的三种模式

private static final Pattern TILE_PATTERN = Pattern.compile("<xyz:tile\\sfilename=\"(\\S+)\"");
private static final Pattern VALUE_PATTERN = Pattern.compile("<xyz:value\\sxyz:name=\"(\\S+)\"[\\sxyz:type=\"(\\S)\"]*>");
private static final Pattern IF_PATTERN = Pattern.compile("<xyz:if-visible\\sxyz:name=\"(\\S+)\">");

VALUE_PATTERNIF_PATTERN都可以。 TILE_PATTERN不起作用......

这是我的方法:

public static List<String> scanForTiles(TemplateModel template) {
    try (Stream<String> stream = Files.lines(template.getPath())) {
        List<String> includes = new ArrayList<>();
        stream.map(TILE_PATTERN::matcher)
            .flatMap(matcher -> {
                List<String> list = new ArrayList<>();
                while (matcher.find()) {
                    list.add(matcher.group(1));
                }
                return list.stream();
            })
            .forEach(includes::add);
        return includes;
    }catch (IOException e) {
    e.printStackTrace();
}
    return null;
}

我模板的示例代码:

<!-- NOT ok -->
<xyz:tile filename="containers/mainLogin.html">
<!-- OK -->
<xyz:if-visible xyz:name=".variable">

1 个答案:

答案 0 :(得分:0)

Linux和windows之间的显着区别是新行。在linux中,新行的字符是\ n(换行符)在windows中,新行由两个字符\ r \ n(回车符和换行符)表示。
此外,默认情况下,正则表达式不会在多行上匹配,并且通常新行字符充当$或结束行匹配器,这可能是正则表达式在两个操作系统中表现不同的原因之一。