<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
。