我正在尝试捕获命令,其中'\'可用于将命令扩展到多行。因此,可能的分隔符可以是:
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);
而不是获得T1和D1的串联,findInLine,它应该忽略扫描器的分隔符,当模式与分隔符相同时返回null!任何人都可以解释这种奇怪的行为吗?
答案 0 :(得分:0)
想出如何获得我想要的行为,但我仍然不明白为什么我的尝试不起作用。
解决方案是使用负面后卫,它不消耗非'\':
Pattern assignment = Pattern.compile("(?<!\\\\)\\n");