天天看点

正则表达式 学习笔记3.4

第一段为合法html代码,第二段为不合法html代码。

[^<]+匹配非<的任意多个字符

开头用来匹配开始tag

结尾用来匹配结束tag

中间用来匹配文本。

发现这个正则表达式,既能匹配合法,又能匹配不合法的。

因为匹配开始tag和结束tag的两个子表达式,并没有什么联系,也就是说匹配的结束tag并不等于开始的tag

下面用反向引用在两个子表示之间建立联系:

String regex = "<(\\w+)>[^<]+</(\\1)>";

运行结果:

<h1>good,good</h1>能够匹配正则:<(\w+)>[^<]+</(\1)>

<h1>bad</h2>不能够匹配正则:<(\w+)>[^<]+</(\1)>

对匹配开始tag的子表达式添加捕获分组:

在匹配结束tag的子表达式中,使用\1这个反向引用的功能:

补充:

一些题外话;使用正则表达式替换的时候,也可以使用反向引用的功能。

例子:

public class GeneralEvelent {

public static void main(String[] args) {

String dupWords = "word word";

String dupWordRegex = "(\\w+)\\s+(\\1)";

System.out.println("替换之前:"+dupWords);

System.out.println("替换之后:"

+dupWords.replaceAll(dupWordRegex, "$1"));

}

替换之前:word word

替换之后:word

简单的去掉重复单词的例子

dupWords.replaceAll(dupWordRegex, "$1")

$1按照java语言规定,这个特殊变量对应的是正则表达式中编号为1的分组所捕获的字符串。

也就是说将两个重复单词的字符串,替换为单个重复单词的字符串,这样就去掉了一个重复单词。

小结

·量词:规定之前元素出现的次数

·*,+,?

·区间量词:{min,max}

·量词的局限:括号(...)的使用

·括号的用途:多选分支

·括号的用途:捕获分组

·括号的用途:反向引用

正则表达式 学习笔记3 完!

本文转自jooben 51CTO博客,原文链接:http://blog.51cto.com/jooben/317570