首页 > 代码库 > Java面试准备之正则表达式
Java面试准备之正则表达式
在常用的Java程序设计中,正则表达式常常跟字符串处理、IO流的部分结合起来,在《Java编程思想》中甚至将正则表达式的讲解放到了IO流这一章的内容里,可见正则表达式跟流的关系之密切。Java设计者也将正则表达式需要用到的包:java.util.regex放在了常用工具里。
在Java中,
正则表达式的量词分了三个等级:
1)贪婪的
为所有可能的模式进行尽可能多的匹配,一般我们使用这种模式;
2)勉强的
只要匹配到就不再继续进行,这种模式在字符串的多个自带方法中有很好的体现;
3)占有的
这个模式在Java中才有,用来放置正则表达式失控,一般我们不使用。
实现方法:
我们通过java.util.regex中的Pattern和Matcher类来实现一般的正则表达式匹配。
一个Pattern对象表示一个正则表达式的编译版本。静态的complie()方法将一个正则表达式编译成Pattern对象,通过一个Pattern实例的matcher()我们可以得到一个Matcher对象实例,这个实例就可以呈现我们要的结果;
例:
Pattern p = Pattern.compile("a*b");Matcher m = p.matcher("aaaaab");boolean b = m.matches();
这是一个最典型的正则表达式实例,”aaaaab“为输入,”a*b“为匹配模式,如果输入能被模式匹配,b的值就为TRUE,反之为FALSE。
Pattern有两个非常实用的方法,一个是静态的public static boolean matches(String regex, CharSequence input),用来查看input中有没有被regex匹配的字符串;
还有一个是split()方法,产生一个按照regex断开的数组,跟String的方法很像。什么是CharSequence
matcher中有很多有用的方法,比如find()方法,可以发现多重模式匹配,并返回一个boolean值,因此一般在while循环中使用它。
实例:如何使用正则表达式,提取一个网页中的URL?这在网络爬虫中使用的比较多。