1

我正在尝试捕获可以使用“\”将命令扩展到多行的命令。因此,可能的分隔符可以是:

Pattern assignment = Pattern.compile("[^\\\\]\\n");

当然,这有将'\n' 之前的最后一个非'\' 字符切掉的问题。我试图通过尝试以下方法来恢复该角色:

由于扫描仪的输入形式为:T1 D1 T2 D2 T3 D3.... 其中 T# 和 D# 分别对应于标记和分隔符编号“#”,我认为这会起作用:

Pattern p = Pattern.compile("\\\\?\\s+");

String residue = file.findInLine(assignment);
String curToken = file.next().trim();

if(residue == null)
   residue = "";
else
   residue = residue.trim();

Scanner tokens = new Scanner(curToken + residue).useDelimiter(p);

findInLine 应该忽略扫描仪的分隔符,而不是获取 T1 和 D1 的连接,而是在模式与分隔符相同时返回 null!谁能解释这种奇怪的行为?

4

1 回答 1

0

弄清楚如何获得我想要的行为,但我仍然不明白为什么我尝试的东西不起作用。

解决方案是使用不消耗非'\'的负面回顾:

Pattern assignment = Pattern.compile("(?<!\\\\)\\n");
于 2013-01-23T21:03:32.253 回答