1

我有一个这样的字符串:

REFORMAT FIELDS=(F1:%[VER#,SAH#]%,%SAH#%,F2:%KMSTAND%) 

我正在尝试使用以下正则表达式来获取“F1:”之后直到“F2”的所有字符:

(F1|F2):(.*?)(?:(?=,F))

它匹配第一部分,但它也应该得到第二部分。所以前瞻功能只能是可选的。怎么了?

编辑: 我的代码:

Matcher fields = Pattern.compile("(F1|F2):(.*?)(?:(?=,F))").matcher(line);
while (fields.find()) {
    //do something with fields.group(2)
}
4

1 回答 1

2

所以前瞻功能只能是可选的。怎么了?

可选的前瞻将毫无用处。在您的情况下,您希望在匹配 F2 后向前看 - 只有您不会寻找,F,而是寻找字符串结尾。

将您的模式更改为

(F1|F2):(.*?)(?=,F|\)) // "(F1|F2):(.*?)(?=,F|\\))" with double-escaped brace
// maybe:
(F\d):(.*?)(?=,F\d|\)) 

或者

(F1|F2):(.*?)(?:$|(?=,F))

如果你想包括右括号

于 2013-03-26T13:26:34.937 回答