Android开发之正则表达式的使用1
来源:互联网 发布:python 期货 编辑:程序博客网 时间:2024/04/28 03:46
正则表达式是一个非常强大的工具,它对于字符串的处理提供非常强大的功能。今天这篇文章只是简要的简绍下正则表达式的语法,以及如何在java中应用它。
那么什么是正则表达式呢?在百度百科中是这么描述的:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
为了认识什么是正则表达式,先举一个简单的例子:
- "aa".matches(".*");
一,简单是认识 ".", "\d", "\D", "\s", "\S","\w", "\W"
上面这些在正则表达式中被称为:Prefined characterclasses(已定义好的字符类)。
"."Any character (may or may not matchline terminators)
用于匹配任意一个字符。
"\d"Adigit:[0-9]
用于匹配数字,它和[0-9]是等价的
"\D"Anon-digit:[^0-9]
用于匹配非数字,和[^0-9]是等价的
"\s"A whitespace character:[\t\n\x0B\f\r]
用于匹配空白字符,其中包括:空格,\t,\n,\x0B,\f,\r,它的用法和:[\t\n\x0B\f\r]等价
“\S"A non-whitespacecharacter:[^\s]
用于匹配非空白字符。
"\w"A wordcharacter:[a-zA-Z_0-9]
用于匹配word字符,包括a-z的小写字符,A-Z的大写字符,下划线和数字。
"\W"A non-wordcharacter:[^\w]
用于匹配非word字符。
二,简答认识正则表达式中的”集合“,及"[","]"的使用。
[abc]a,b orc.
可以用数学中集合中的概念”或“来描述。及可以描述成:a或b或c。
[^abc]Any character excepta,b,c
这个类似于集合中求补集的概念,也可以理解成”非“。及除了a,b,c外的任意字符。
[a-zA-Z]和[a-z[A-Z]]
两者都是“a-z或A-Z”的意思。前者是平行关系,或者是并集关系。
[a-z&&[def]]intersection
就是取交集的意思。
三,边界匹配,"^", "$", "\b", "\B" , "\A","\G", "\Z", "\z"
"^"The beginning of aline
匹配字符串的开头。如,"abc".matches("^a.*");返回true。
"$"The end of aline
匹配字符串的结尾。如,"abc".matches("abc$");返回true。
"\b"A wordboundary
匹配单词边界。如,"helloworld".matches("hello\\b\\swordl");返回true。
"\B"A non-wordboundary
匹配非单词边界。
"\A"The beginning of theinput
匹配输入的开头。
"\G"The end of the previosmatch
"\Z"The end of the input but for the finalterminator, if any
"\z"The end of theinput.
三,限定次数。又分三种:Greedyquantifiers,Reluctant quantifiers和Possessivequantifiers
1,Greedyquantifiers。
其实三种模式的用法基本上相同,只是在匹配的策略上会有所不同,所以结果有时会有不同。
X?X,once or not atall
X出现一次或一次也没有出现。
X*X,zero or moretimes
X没有出现或出现任意次。
X+X,once or moretimes
X出现一次或一次以上
X{n}X,exactly ntimes
X刚好出现n次
X{n,}X,at least ntimes
X至少出现n次
X{n,m}X,atleast n times bu no more thanm times
X出现次数在n和m范围之间
2,Reluctantquantifiers
X??,X*?,X+?,X{n}?,X{n,?}?,X{n,m}?各自的解释对应于Greedyquantifiers 中的解释。
3,Possessvequantifiers
X?+,X*+,X++,X{n}+,X{n,?}+,X{n,m}+各自的解释对应于Greedyquantifiers 中的解释。
那么他们三个有什么不同之处呢?先看一下下面的例子:
1,Greedyquantifiers:
- Pattern
p "\\w+\\d{2}");= Pattern.compile( -
Matcher m = p.matcher("aa22bb22"); -
if(m.find()){ -
System.out.println(m.group()); -
}
2,Reluctantquantifiers:
- Pattern
p "\\w+?\\d{2}");= Pattern.compile( -
Matcher m = p.matcher("aa22bb22"); -
if(m.find()){ -
System.out.println(m.group()); -
}
此时输出结果为:aa22;
3,Possessivequantifiers;
Pattern p = Pattern.compile("\\w++\\d{2}");
- Matcher
m "aa22bb22");= p.matcher( - if(m.find()){
-
System.out.println(m.group()); - }
此时输出结果为空,就是说没有得到匹配的结果。
那么从上面个的例子我们容易看出它们直接的区别还是很大的,从名字上来看,Greedy:贪婪的。意思就是想在在匹配的结果中找打尽可能长的字符串。Reluctant:不情愿的。意思就是从匹配的结果中找到尽可能短的字符串。Possessive:占有欲强的。就是一次匹配正则表达式中最长的长度来匹配,如果次长度匹配不了就不再进行匹配。
四,Pattern 和Matcher
这两个类是java中用于正则表示的最基础的两个类,上面的例子中也用到了这两个类,其中提供了许多实用的方法。这就需要我们在实用的时候去查阅API文旦了。
当然,限于篇幅和本文的初衷,只写了其中最基础的一些用法,在Pattern的文档中还有其他常用的一些匹配,需要我们在实用的时候去查阅文档了。
最后在提醒一点,在java中凡是要用到斜杠"\"的地方一定要用双斜杠"\\"来代替,因为单斜杠会和其他字符组合成为转义字符。
原文地址:http://blog.csdn.net/chenshaoyang0011/article/details/7217449
- Android开发之正则表达式的使用1
- android开发之正则表达式
- Android开发之旅一常用的正则表达式
- iOS开发之正则表达式的使用-RegexKitLite
- Android 正则表达式的使用
- android开发之正则表达式(EditText)
- Android开发技术铺垫之正则表达式
- IOS开发之常用的正则表达式
- IOS开发之常用的正则表达式
- IOS开发之常用的正则表达式
- IOS开发之常用的正则表达式
- IOS开发之常用的正则表达式
- iOS开发之常用的正则表达式
- iOS开发之常用的正则表达式
- Android开发中--正则表达式的实用
- iOS开发中正则表达式的使用
- IOS开发中正则表达式的使用
- iOS开发正则表达式的使用
- Android开发之下拉列表框组件Spinn…
- Android如何将时间的格式变为24小…
- Android开发之日期时间选择组件事…
- Android开发之焦点事件的使用
- Android开发之长按事件的--改变桌…
- Android开发之正则表达式的使用1
- Android正则表达式2
- Android开发之键盘事件,验证邮箱…
- Android开发之触摸事件-点击屏幕获…
- Android开发之触摸事件的使用--触…
- MFC+ ACCESS 数据库程序移植到客户机出现ERROR CODE 80004003 解决方案
- html5当中支持的视频格式
- html5开发<video>视频标签的使用--…
- html5之<video>开发实现音乐播放控…