我有一个字符串,我需要得到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) );
}
我的正则表达式错了。 请协助。
答案 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中进行测试。