我构建了i类名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_PATTERN和IF_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">发布于 2016-03-02 20:26:07
linux和windows之间的显著区别在于新的代码行。在linux中,换行符是\n (换行符),在windows中,换行符由两个字符\r\n (回车符和换行符)表示。
此外,默认情况下,正则表达式在多行上不匹配,通常新行字符充当$或结束行匹配器,这可能是正则表达式在两个操作系统中表现不同的原因之一。
https://stackoverflow.com/questions/35746860
复制相似问题