java正则表达式(九)

java正则表达式(九)

九、后向引用

在正则表达式中,后向引用用于重复搜索前面某个分组匹配的文本,难以理解?请看示例:

在以下一段html文本中:

<BODY><H1>Welcome to my Homepage</H1>Content is divided into two sections:<BR><H2>ColdFusion</H2>Information about Macromedia ColdFusion.<H2>Wireless</H2>Information about Bluetooth, 802.11, and more.</BODY>

我们需要把<H1></H1>等这种段落标签,都匹配出来,如何实现呢?我们可以利用反向引用来进行匹配,反向引用匹配正则表达式如下:

<[hH]([1-6])>.*?</[hH]\1>

结合上节所讲内容,([1-6])加上了括号,成为了子表达式,在我们整个正则表达式中,模式的最后部分是“\1”,即子表达式的后向应用,因此,当([1-6])匹配到了1-6的任意数字时,那么“\1”也将匹配之前出现的数字,代码示例如下:

1 package regexp; java.util.regex.Matcher; 4 import java.util.regex.Pattern; Test { main(String[] args) { 8String s=”<BODY>”+ 9″<H1>Welcome to my Homepage</H1>”+10″Content is divided into two sections:<BR>”+11″<H2>ColdFusion</H2>”+12″Information about Macromedia ColdFusion.”+13″<H2>Wireless</H3>”+14″Information about Bluetooth, 802.11, and more.”+15″</BODY>”;16String reg=”<[hH]([1-6])>.*?</[hH]\\1>”;1718Pattern patt=Pattern.compile(reg);19Matcher mc=patt.matcher(s);(mc.find()){22 System.out.println(mc.group().trim());23 }* 输出:27 * <H1>Welcome to my Homepage</H1>28 * <H2>ColdFusion</H2> }31 }

注:<H2>Wireless</H3>并未匹配成功,因为,在([1-6])进行匹配时,所匹配的数字为2,那么,香港服务器,后向应用的数字也应为2,美国空间,但是这里</H3>标签,香港服务器,最后数字为3,因此,后向匹配不成功,所以

<H2>Wireless</H3>匹配失败!

posted on

只能昏昏沉沉地沿着青草和泥土的气息前进。

java正则表达式(九)

相关文章:

你感兴趣的文章:

标签云: