<InstanceIdentifier>118e3040-51d2-11e3-8f96-1110200c9a66</InstanceIdentifier>
这是我的字符串,我想要 118e3040-51d2-11e3-8f96-1110200c9a66 部分。
尝试过这个
Pattern p = Pattern.compile("(\\b<InstanceIdentifier>\\b)(.*?)(\\b<\/InstanceIdentifier>\\b)");
但是当然它不起作用。有建议吗?
最佳答案
只需删除第一个和最后一个 \\b
然后删除 /
之前存在的反斜杠
Pattern p = Pattern.compile("(<InstanceIdentifier>\\b)(.*?)(\\b</InstanceIdentifier>)");
或
Pattern p = Pattern.compile("<InstanceIdentifier>\\b(.*?)\\b</InstanceIdentifier>");
Matcher m = p.matcher(s);
if(m.find())
{
System.out.println(m.group(1));
}
请注意\\b
单词字符和非单词字符之间的匹配,因此上述正则表达式必须排除起始 INstanceIdentifier
旁边的单词字符。标签和结束之前 INstanceIdentifier
标签。
您的正则表达式失败,因为在行开头和开头之间不存在实际存在的单词字符 <
括号 ,同样, >
旁边不存在单词字符和线边界的末端。在本例中,添加 \\B
而不是\\b
在开始和结束时应该有效。
关于来自字符串的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763301/