黑马程序员技术交流社区
标题:
正则的一点疑惑!
[打印本页]
作者:
田建
时间:
2012-6-22 14:12
标题:
正则的一点疑惑!
本帖最后由 田建 于 2012-6-24 07:47 编辑
//这是写完网络爬虫,打算改变一下,将爬到的东西存到文件,存的时候打算做一次判断,已存在的文件即更名后存储,在更名时遇到一个问题,再就是转义的时候为什么要是两个\\一直有点想不明白!
import java.net.*;
import java.io.*;
import java.util.regex.*;
class RegexTest_2
{
public static void main(String[] args)throws Exception
{
getMails();
}
public static void getMails()throws Exception
{
int count=0;
URL url=new URL("http://www.9u8u.com/yxzt/25684_2.html");
URLConnection conn=url.openConnection();
BufferedReader bufr=new BufferedReader(new InputStreamReader(conn.getInputStream()));
File file=new File("mail.txt");
while(file.exists()&&file.isFile())//用于判断文件是否已经存在,若存在,便更名
{
file.renameTo(new File("mail("+(count++)+")"+"\\."+"txt"));//这是我犯的一个错误,后来经过测试,把\\去掉就能解决,但我不太理解为什么加上\\之后编译没问题,但运行会一直保持等待,请高手解答!
}
BufferedWriter bufw=new BufferedWriter(new FileWriter(file));
String line=null;
String mailreg="[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+";
Pattern p=Pattern.compile(mailreg);
while((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
bufw.write(m.group());
bufw.flush();
bufw.newLine();
}
}
}
}
复制代码
作者:
孙峰
时间:
2012-6-22 14:23
第一个问题中“.”仅仅是一个字符吧,和正则没有关系。我认为也可以改写成+".txt"。至于为啥会等待,俺也不明白。
至于正则中"."表示任何字符,例如\d表示0-9的数,如果只写"\d"的话,运行时会当成一个转义字符,所以要先用一个"\"表示这里接受的一个字符,然后这个字符是:\d, 加在一起就是 "\\d"
我感觉这有点可以记住::只要在正则中,"\"肯定要成对的出现 。 记住这句话就好了。
作者:
田建
时间:
2012-6-23 10:57
这个问题贴出来之后,我又反复的用eclipse测试了,发现之所以一直等待的原因是一直在重复的执行while循环,我想可能原因如下:
因为命名规则里不能有\符号,在命名的时候本与正则无关,转过之后命名不成功,因而会重复执行此段代码,形成死循环,不知是否正确!
作者:
李海晓
时间:
2012-6-23 11:04
.在正则表达式表示任意一个字符 \.表示转义字符,表示一个. 在java中\有特殊含义,所以用\\.表示。去掉\\就表示任意字符,可以通过
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2