我有一个字符串和一个我想在该字符串中搜索的模式。现在,当我匹配字符串中的模式时,我想知道与我的模式匹配的字符串。
String template = "<P ALIGN=\"LEFT\"><FONT FACE=\"Verdana\" SIZE=\"12\"> My Name is xyz </FONT></P>";
String pattern = "<FONT.*>";
Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
如何找出与模板中的模式匹配的字符串。
即我想得到<FONT FACE=\"Verdana\" SIZE=\"12\">
作为结果。 Java中的正则表达式库提供的任何方法可以帮助我吗?
更新:
可以匹配<FONT FACE=\"Verdana\" SIZE=\"12\"> My Name is xyz </FONT>
的正则表达式是什么和<LI><FONT FACE=\"Verdana\" SIZE=\"12\"> My Name is xyz </FONT></LI>
并且在给定的文本中不应该是贪婪的。
最佳答案
可以通过 matcher.group()
访问字符串的匹配部分.
更精细的方法是使用 capturing groups 。将要从匹配字符串中“提取”的部分放在括号内,然后通过例如 matcher.group(1)
来获取匹配的部分。
在您的特定示例中,您需要对 *
使用不情愿的限定符。否则,.*
将一直匹配到字符串末尾(因为它以 P>
结尾)。
为了说明 Matcher.group()
的使用和 Matcher.group(int)
:
String template = "<P ALIGN=\"LEFT\"><FONT FACE=\"Verdana\" SIZE=\"12\"> My Name is xyz </FONT></P>";
String pattern = "<FONT (.*?)>";
Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(template);
if (m.find()) {
// prints: <FONT FACE="Verdana" SIZE="12"> My Name is xyz </FONT></P>
System.out.println(m.group());
// prints: FACE="Verdana" SIZE="12"
System.out.println(m.group(1));
}
关于Java正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474755/