我有以下字符串:
\018attribute1=value1\028attribute2=value2\033attribute3=value3
注意:这"\0xx"
是一个不包含特殊字符的硬字符串,"\0xx"
是随机的。我从一个 api 得到这个字符串,它包含“\”字符。
我想提取属性名称和属性值
怎么做?
我有以下字符串:
\018attribute1=value1\028attribute2=value2\033attribute3=value3
注意:这"\0xx"
是一个不包含特殊字符的硬字符串,"\0xx"
是随机的。我从一个 api 得到这个字符串,它包含“\”字符。
我想提取属性名称和属性值
怎么做?
您需要对\
字符进行两次转义。一次用于 Java,一次用于正则表达式。这变成了\\\\
. 然后你可以使用Pattern
andMatcher
建立你的价值观的地图:
Pattern p = Pattern.compile("\\\\0..([^=]+)=([^\\\\]*)");
Matcher matcher = p.matcher("\\018attribute1=value1\\028attribute2=value2\\033attribute3=value3");
Map<String, String> attributes = new HashMap<String, String>();
while (matcher.find()) {
attributes.put(matcher.group(1), matcher.group(2));
}
像这样对我有用:
String str = "\\018attribute1=value1\\028attribute2=value2\\033attribute3=value3";
Pattern p = Pattern.compile("0\\d{2}(.*?)=(.*?)(\\\\|$)");
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println("-------");
}
它产生了:
attribute1
value1
-------
attribute2
value2
-------
attribute3
value3
正则表达式假定您需要匹配的模式始终以反斜杠开头,后跟 2 位数字 (\0xx)。然后它将提取第一个子字符串,直到它遇到等号。一旦它与等号匹配,它将继续匹配,直到它碰到另一个斜杠或字符串的末尾。
如果你没有这三个数字,你可以用类似这样的东西来代替它,\0\w{2}
这将匹配一个零,后跟任何字母、数字或下划线。