正则表达式在字符串中查找key->值

时间:2012-06-05 14:06:06

标签: java regex string

我有一个字符串,我需要得到key->值对的数组(2 - dim)。

“匹配”是指在2个字之间存在 - > ,之前和之后的mo空格 - >

例如输入字符串:

  

skip_me key1-> value1 key2-> value2 skip_me_2 key3-> value3 skip_me_3 skip_me - >还

结果应为数组:
键1,值1
KEY2,值2
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 个答案:

答案 0 :(得分:2)

匹配单词字符(字母,数字和下划线_)......尽可能多的

Pattern.compile( "(\w+)->(\w+)" );

答案 1 :(得分:1)

尝试

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

(没有用Java测试)。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我想你可以使用:

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

它使用积极的前瞻和积极的lookbehind来匹配->之前和之后的所有内容。

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