3

キー->値のペアの配列(2-dim)を取得するために必要な文字列があります。

「一致」とは、 2つの単語の間に->があり、前後にmoスペースがある場合です->

たとえば、入力文字列:

skip_me key1-> value1 key2-> value2 skip_me_2 key3-> value3skip_me_3skip_me->また

結果は配列になります: key1
、value1
key2、value2
key3 、value3

これは私のコードです:

Pattern p = Pattern.compile( "\\s*([^(->)]+)->([^(->)]+)\\s*" );
Matcher m = p.matcher("skip_me key1->value1 key2->value2 skip_me_2 key3->value3 skip_me_3");
while( m.find() ) {
  System.out.println( "Key:" + m.group(1) + "Value:" + m.group(2) );
}

私の正規表現は間違っています。手伝ってください。

4

4 に答える 4

2

単語の文字(文字、数字、アンダースコア_)に一致します...できるだけ多く

Pattern.compile( "(\w+)->(\w+)" );
于 2012-06-05T14:12:49.187 に答える
1

試す

Pattern p = Pattern.compile("([^\s]+?)->([^\s]+)");

(Javaでテストしませんでした)。

于 2012-06-05T14:12:29.713 に答える
0

[^(->)]*あなたの正規表現の一部は間違いなくあなたが望むものではありません。(、、、およびのいずれの文字も含まない-、文字のシーケンスに一致します。>)

于 2012-06-05T14:13:34.917 に答える
0

私はあなたが使うかもしれないと思います:

Pattern.compile( "\\s*(([^\\s]+)(?=->))->((?<=->)([^\\s]+))\\s*" );

ポジティブルックアヘッドとポジティブルックビハインドを使用して、前後のすべてに一致します->

Javaではテストされていません。サンプル文字列に基づくEclipseRegexUtilでのみテストされています。

于 2012-06-05T14:29:34.223 に答える