<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标记之前的单词字符之外。

您的regex失败,因为在行的开始和<括号之间没有单词字符,同样,在>和行边界的末尾也没有单词字符。在这种情况下,应该在开头和结尾添加\\B而不是\\b

08-08 02:31