`
duanyong
  • 浏览: 92763 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java正则表达式

    博客分类:
  • j2ee
阅读更多

从学javascript到java,从asp到asp.net,不管那种语言,正则都是我难于愈合的痛。今天晚上准备一刀切,搞定正则。
开始,翻书。《JDK 学习笔记》,《think in java 3th》。

java是在j2se 1.4之后支持正则的,在java.util.regex.Pattern类中有相关的正则表达式的信息。

下面的这些概念要记牢

  • 特殊字符含义

<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->

\xhh			十六进制\0xhh的字符
\uhhh			十六进制0xhhhh表示的Unicode字符
\t			制表符
\n			换行符
\r			回车
\f			换页
\e			转义
  • 字符对比
方法				说明

.				符合任一个字符
\d				符合0-9任一个数字字符(digital)
\D				对 \d 取反
\s				符合\t, \n, \x0B, \f, \r等空格字符(space)
\w				只要是字母和数字都符合(word? 貌似不像,也不管了,就这样记忆吧)
\W				对 \w 取反

 

split 来简单测试一下:

		String text = "abcdebcadxbc";
		String[] tokens = text.split(".bc");
		for (String token : tokens) {
			log(token);
		} 

结果:
(空格)
d
ad

怎么有空格呢!再试,这次把tokens的长度也码出来。

		log(tokens.length);

 结果:3。难道是匹配开头的也算?再试:

		String[] tokenss = "xiaox".split(".iao");
		for (String token : tokenss) {
			log(token);
		}
		
		log(tokenss.length);

  结果:

(空格)
x
2
果真。另外还发现一个问题,当split与字符不匹配时,返回一个长度为1的数组,而字符串就是第一个元素。

 

  • 设置一组字符串的范围
范围			作用

[abc]			符合a,b,c其中一个字符
[^abc]			只要不是a,b,c这三个字符都符合
[a-zA-Z]			字符大小定都符合
[a-dm-p]		字符a-d或者d-m的字符都符合
[a-z&&[acd]]		字符acd其中一个与a-z字符的交集
[a-z&&[^bc]]		字符a-z与bc的差集,差不多意思就是bc除外的a-z的字符

上面的需要结合贪婪量词(JDK 5学习笔记 P127,专业词,不明白啥意思)来对字符串进行匹配。

  • 贪婪量词

<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->

范例			作用

X?			X不出现或者一次
X*			X出现或出现N次都匹配
X+			X至少出现一次才匹配
X{n}			X需要出现n次才匹配
X{n,}			X至少要出现n次才匹配,? X{1,} == X+
X{n, m}			X出现的次数在n到m之间

 

  • 逻辑运算符

<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->

XY			XY
X|Y			X或Y
(X)			捕获组

  • 边界匹配

<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } -->

^			一行的开始
$			一行的结尾
\b			词界
\B			非词界
\G			上一级结尾

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics