【发布时间】:2013-12-31 05:26:27
【问题描述】:
我需要一个匹配以下各项的模式:
- 除 (
:=#\) 之外的非空白符号字符串,后跟:,再后跟除 (:=#\) 之外的非空白符号字符串或 - 空格或制表符后跟 1 个或多个非空白字符或
- a # 后跟任何内容或
- 一行包含一个或多个空格或制表符或
- 以前没有发现的东西的包罗万象。
我目前的模式如下:
^([\\S&&[^\\n:=#\\\\]]+):([[\\s&&[^\\n]][\\S&&[^\\n=:#\\\\]]*]*)|^[ \\t](\\S[\\s\\S&&[^\\n]]*)|(^#[\\s\\S&&[^\n]]+)|^([\\s&&[^\\n\\x0B\\f\\r]]+)|([[\\s\\S]&&[^\\n]]+)
我正在使用 findwithinhorizon(this Pattern, 0)
将它与 Scanner 一起使用在下面的块中,inp 是缓冲的扫描器,_pat 是上面的模式。 我遇到了将字符串分配给错误匹配组的问题。
前:
bob: cat dog
meow
在此扫描仪中运行此程序后,我在匹配组 2(“猫狗”)上调用 .split(\\s+) 后得到一个空字符串,并且“喵”与组 6(我的错误组)而不是组 3 匹配.
BufferedReader buf =
new BufferedReader(new FileReader(makeFile));
Scanner inp = new Scanner(buf);
while (inp.findWithinHorizon(_pat, 0) != null) {
int i = 1;
MatchResult mat = inp.match();
for (; i <= TOTAL_VALS; i++) {
if (mat.group(i) != null) {
break;
}
}
【问题讨论】:
标签: java regex string java.util.scanner