正则表达式是一个很有用的东西,也是一个很有趣的东西。当你需要你的软件从一篇文章中自动取得你想要的段落时,它就会展现出它的价值了。
然而正则表达式不是那么容易掌握的,甚至很难理解,常常你会难以看懂别人写的一长串正则表达式,但它确实能达到目的。
话虽如此,要想学会正则表达式,还是得从基础开始。
Java正则表达式基础(部分)
(1)转义字符
由于Java中数据源通常是字符串形式,所以一些特殊字符需要用转义字符来表达,下面列举的是几个常用的转义字符在字符串中的写法:
\\s 空格
\\t TAB
\\n 换行
(2)单个字符限定条件
单个字符限定条件,使用符号“[ ]"(方括号)
[a-z] 限定为小写字母a到z之间的任意一个字符
[A-Z] 限定为大写字母A到Z之间的任意一个字符
[a-zA-Z] 同理,即限定为大小写的26个字母
[0-9] 限定为0到9中的任意一个数字
其中,在方括号内加入^(尖号),表示“非”
[^a-z] 表示除a到z之外的任意一个字符
其余同理
(3)匹配多个字符
a* 表示0个及以上数量的a
.* 表示0个及以上数量的任意一个字符
实例:
从一个网页的源码中匹配带有href属性和title属性的a标签:
"(<a\\shref=[^>]*\\stitle=[^>]*>)"
假定其中a与href之间只有一个空格,href的值最后一个字符与title之间也只有一个空格。其中要匹配的是href属性的值,用[^>]*表示多个不是>号的任意字符,目的是不能匹配到a标签的结束位置。整体外面添加()号的原因是,把a标签整体视作一个组合,这样在一长串的网页源码中才能匹配到想要的结果。
Pattern pattern = Pattern.compile(tagRegex);
Matcher matcher = pattern.matcher(htmlResource);
boolean result = matcher.find();
while (result) {
for (int j = 1; j <= matcher.groupCount(); j++) {
tags.add(matcher.group(j));
}
result = matcher.find();
}
其中tags是一个Vector<String>变量,用来存储匹配到的a标签结果。