1

私はこのような文字列を持っています:

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

そして、次の正規表現を使用して、「F1:」から「F2」までのすべての文字を取得しようとしています。

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

最初の部分と一致しますが、2番目の部分も取得する必要があります。そのため、先読み機能はオプションでのみ機能します。どうしたの?

編集: 私のコード:

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 に答える