java正则表达式中的数量词
java中的正则位于java.util.regex包中,这个包中只有一个MatchResult接口和Matcher、Pattern两个类。
正则中的数量词有Greedy (贪婪)、Reluctant(懒惰)和Possessive(强占)三种
Greedy 数量词
X?
X,一次或一次也没有
X*
X,零次或多次
X+
X,一次或多次
X{n}
X,恰好 n 次
X{n,}
X,至少 n 次
X{n,m}
X,至少 n 次,但是不超过 m 次
Greedy是最常用的,它的匹配方式是先把整个字符串吞下,然后匹配整个字符串,如果不匹配,就从右端吐出一个字符,再进行匹配,直到找到匹配或把整个字符串吐完为止。
Matcher m=Pattern.compile("a.*b")
.matcher("a====b=========b=====");
while(m.find()){
System.out.println(m.group());
}
输出:
a====b=========b
因为总是从最大 匹配开始匹配,故称贪婪。
Reluctant 数量词
X??
X,一次或一次也没有
X*?
X,零次或多次
X+?
X,一次或多次
X{n}?
X,恰好 n 次
X{n,}?
X,至少 n 次
X{n,m}?
X,至少 n 次,但是不超过 m 次
Reluctant正好和Greedy相反,它先从最小匹配开始,先从左端吞入一个字符,然后进行匹配,若不匹配就再吞入一个字符,直到找到匹配或将整个字符串吞入为止。
Matcher m=Pattern.compile("a.*?b")
.matcher("a====b=========b=====");
while(m.find()){
System.out.println(m.group());
}
输出:
a====b
因为总是从最小匹配开始,故称懒惰。
Possessive 数量词
X?+
X,一次或一次也没有
X*+
X,零次或多次
X++
X,一次或多次
X{n}+
X,恰好 n 次
X{n,}+
X,至少 n 次
X{n,m}+
X,至少 n 次,但是不超过 m 次
Possessive和Greedy的匹配方式一样,先把整个字符串吞下,然后匹配整个字符串,如果匹配,就认为匹配,如果不匹配,就认为整个字符串不匹配,它不会从右端吐出一个字符串再进行匹配,只进行一次
Matcher m=Pattern.compile("a.*+b")
.matcher("a====b=========b=====");
while(m.find()){
System.out.println(m.group());
}
输出:
因为贪婪但并不聪明,故称强占。
相关文档:
<%
URL url = new URL("http://www.itpub.net");
//建立URL对象,并实例化为url,获得要抓取的网页地址
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),"GB2312"));
//建立BufferedReader对象,并实例化为reader,这里的GB2312是要抓取的网页编码格式
whi ......
大家好,这里有IBM的三个长期需求:均是需要2年以上相关工作经验,其中Java以及Testing需要英语可以交流,C/Unix不需要语言。
Java 大连
描述:Java programming, knowledge in J2SE, SWT/JFace, XML. Eclipse programming, knowledge in eclipse architecture. Clear understanding of plugin development. Hands-on exp ......
C# Java命名规则
C# (C#高级编程,微软设计模式)
命名空间,类,方法 :每个单词的第一个字母大写 例 ServerCode。
(采用Pascal大小写规则)
私有成员:单词的第一个字母小写,通常前面加上“_” 例 _name 或 _serverCode。
(采用camell大小写规则)
Java (java设计 ......
在java中实质只存在一种传递方式:即值传递。 而引用传递是对C/C++而言的。结论:
对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。
对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。
方法体内对参数进行运算,不影响原有变量的值。
......