3

我有一个字符串,我需要获取键-> 值对的数组(2 - 暗淡)。

“匹配”是当两个单词之间有一个->,前后有mo空格->

例如输入字符串:

skip_me key1->value1 key2->value2 skip_me_2 key3->value3 skip_me_3 skip_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

我想你可能会使用:

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

它使用正向前瞻和正向后视来匹配前后的所有内容->

未在 Java 中测试,仅在基于您的示例字符串的 Eclipse Regex Util 中测试。

于 2012-06-05T14:29:34.223 回答
0

您的正则表达式的部分[^(->)]*绝对不是您想要的。它匹配一系列字符,不包含任何字符(-和。>)

于 2012-06-05T14:13:34.917 回答