我正在尝试解析通过这样格式化的字符串,除了更多的值:
Key1=value,Key2=value,Key3=value,Key4=value,Key5=value,Key6=value,Key7=value
正则表达式
((Key1)=(.*)),((Key2)=(.*)),((Key3)=(.*)),((Key4)=(.*)),((Key5)=(.*)),((Key6)=(.*)),((Key7)=(.*))
在实际的字符串中,密钥/值的数量大约是其两倍,但为了简洁,我将其缩短.我把它们括在括号中,所以我可以分组给它们打电话.我存储为常量的键,它们将始终相同.问题是,它从来没有找到一个没有意义的匹配(除非正则表达式是错误的)
根据上面的评论判断,听起来你正在创建Pattern和Matcher对象并将Matcher与目标字符串相关联,但实际上并没有应用正则表达式.这是一个非常常见的错误.这是完整的序列:
String regex = "Key1=(.*),Key2=(.*)"; // etc.
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(targetString);
// Now you have to apply the regex:
if (m.find())
{
String value1 = m.group(1);
String value2 = m.group(2);
// etc.
}
Run Code Online (Sandbox Code Playgroud)
你不仅需要调用find()或matches()(或lookingAt(),但从来没有人使用了一个),你应该总是把它在if或while声明-也就是说,你应该确保在正则表达式实际工作调用任何方法之前一样group(),需要的匹配器处于"匹配"状态.
还要注意大部分括号的缺失.它们不是必需的,将它们排除可以更容易(1)读取正则表达式和(2)跟踪组号.