黑马程序员技术交流社区
标题: 第五贴之正则表达式 [打印本页]
作者: 黄茂霖 时间: 2013-5-12 02:26
标题: 第五贴之正则表达式
本帖最后由 shenqi 于 2013-5-12 02:29 编辑
问:什么是正则表达式?
答:所谓正则表达式(regex)可以理解为符合某种规则的表达式,在Java中专门用来处理字符串的。
那么使用正则表示是究竟有什么好处呢?首先观察如下代码:
//一个检验QQ号码是否合法的程序(没有使用正则表达式):
package cn.itcast.itheima2;
public class RegexTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new RegexTest().checkQQ("5656247"));
}
public boolean checkQQ(String qq){
//qq号码的规则:5~15位纯数字 首位非0
//检查长度
int len = qq.length();
if(len >=5&&len<=15){
//检查首位是否为0
if(!qq.startsWith("0")){
//检查是否纯数字
for(int i=0;i<qq.length();i++){
if(!(qq.charAt(i)>='0' && qq.charAt(i)<='9')){
//如果存在非数字立即返回false
System.out.println(“出现非法字符”) ;
return false;
}
}
//也可以使用转换的方式检验是否纯数字
/*try{
long l = Long.parseLong(qq);
}catch(NumberFormatException e){
System.out.println(“出现非法字符”) ;
}*/
}else{
System.out.println("首位不能为0");
return false;
}
}else{
System.out.println("长度错误!");
return false;
}
return true;
}
}
以上代码校验QQ号码尤为复杂,如果使用正则表达式检验QQ号码代码则会简洁得多:
package cn.itcast.itheima2;
public class RegexTest {
public static void main(String[] args) {
System.out.println(new RegexTest().checkQQRegex("56534237"));
}
public boolean checkQQRegex(String qq){
//[1-9]表示字符串的第一位的范围1-9的数字
//[0-9]表示字符串的第二位的范围0-9的数字
//{4,14}表示第二位开始至少出现4-14个数字
return qq.matches("[1-9][0-9]{4,14}");
}
}
显然使用正则表达式更具优越性,正则表达式利用一段特定的符号对字符串进行操作,其底层同样也是利用了复杂的方法写的,只不过我们使用的时候比较爽,学习正则表达式其实就是学习这些特定的符号。正则表达式的单词是regex,位于java..util.regex.Pattern中,在Java se的API文档中可以查看到已经构造好的的匹配符号。
例如:
具体可以查看java se的文档。
作者: 黄茂霖 时间: 2013-5-12 02:28
本帖最后由 shenqi 于 2013-5-12 02:31 编辑
正则表达式不仅仅可以校验字符串、匹配字符串、切割字符串。通常在程序中的应用是检索、替换、查找,例如在Windows打开一个窗口时按ctrl+f出现搜索功能,假如要搜索.jpg格式的图片,通过我们会用*.jpg来查找,这也可以利用正则表达式事先。还有网页爬虫也是利用正则表达式写的。
以下是网页爬虫的简单实现:
- package cn.itcast.itheima2;
- import java.io.BufferedReader;
- import java.io.FileInputStream;
- import java.io.FileReader;
- import java.io.InputStreamReader;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class WebpageReptile {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- getMail();
- public static void getMail(){
- try {
- BufferedReader buf =
- new BufferedReader(new FileReader("c:\\1.html"));
- String line = null;
- //匹配邮件的正则表达式
- String reg = "\\w+@\\w+(\\.\\w+)+";
- //将规则封装成Pattern对象
- Pattern p = Pattern.compile(reg);
- while((line = buf.readLine())!=null){
- //匹配器
- Matcher m = p.matcher(line);
- while(m.find()){
- System.out.print(m.group());
- }
- System.out.println();
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- }
- }
复制代码 由此可以看出比较复杂的还是正则表达式的特定的字符比较难。
String reg = "\\w+@\\w+(\\.\\w+)+";
http://edu.csdn.net/news/2012822/f21877d69403.shtml
作者: 曹睿翔 时间: 2013-5-12 09:31
昨天有事,现在大致看下,还是不错了,能继续完善最好,一起努力,满25分了
作者: 刘茂林 时间: 2013-5-12 10:41
好东西啊 不错。。
作者: 黄茂霖 时间: 2013-5-12 10:55
刘茂林 发表于 2013-5-12 10:41
好东西啊 不错。。
你叫刘茂林 不是吧 我也叫茂霖
作者: 刘茂林 时间: 2013-5-12 11:02
shenqi 发表于 2013-5-12 10:55
你叫刘茂林 不是吧 我也叫茂霖
这么神奇。。。哈哈。。 你是要参加20期的不?
作者: 黄茂霖 时间: 2013-5-12 12:20
刘茂林 发表于 2013-5-12 11:02
这么神奇。。。哈哈。。 你是要参加20期的不?
好吧 其实我是云4
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |