RegEx
正则表达式:符合一定规则的表达式
作用:用于专门操作字符串[操作字符串的一种规则]
特点:用一些特定的符号来表示一些代码操作.这样就可以简化书写
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正在越长,阅读性越差….
学习正则表达式,就是在学习一些特殊符号的作用.
具体操作功能:
1,匹配match-es[匹配]
boolean | matches(String regex)将regex正则表达式作用到该字符串上 |
用规则匹配整个字符串,只要有一处不符合,就返回flase.
2,切割sp-lit[劈开]
String[] | |
String[] |
注意: ((A)(B(C)))-----一共为四组,只要看单个的开括号就成了.
3替换re-pla-ce[替换]
replaceAll(String regex, String replacement) |
4,获取
Patt-ern[模式] com-pile[编译] mat-cher[匹配器] se-quence [数][计] 序列
字符串中的符合规则的子串取出
操作步骤:
>1,将正则表达式封装成对象Pattern p=Pattern. compile(String regex);
>2,让正则对象和要操作的字符串相关联,并获取正则匹配引擎
Matcher m=p. matcher(CharSequence input)
>3,通过引擎对符合规则的子串进行操作,比如取出.
java.util.regex
类 Pattern
static Pattern | |
matcher(CharSequence input) |
java.util.regex
类 Matcher
boolean | find() |
group() |
int | start() |
int | end() |
Exercise1:
Exercise2:对Ip地址进行地址段的排序
Exercise3:对邮件地址进行校验
网页爬虫(蜘蛛)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 需求:爬黑马BBS的用户。
* 技术分超过25的
* 存入一个文件中。
* 格式为:姓名xxx UIDxxx 技术分xxx
*/
class Url
{
static String name = null;
public static void main(String[] args) throws Exception
{
BufferedWriter bw = new BufferedWriter(new FileWriter("f:\\io\\person.txt"));
for(int x=98200;x<100000;x++)
{
//创建连接。直接用UEL,很牛的一个对象,
URL url = new URL("http://bbs.itheima.com/space-uid-"+x+".html");
URLConnection ucc = url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(ucc.getInputStream(),"utf-8"));
//爬这一断代码"数字 </span>技术分"
//还爬一下这断代码"name">用户名<"
String line = null;
while ((line=br.readLine())!=null)
{
String regex = "\\d+ </span>技术分";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(line);
String regex2 = "name\">.+<";
Pattern p2 = Pattern.compile(regex2);
Matcher m2 = p2.matcher(line);
while (m2.find())
{
name = m2.group();
name = name.replace( "name\">","");
name = name.replace("<", "");
}
while (m.find())
{
//把数据存入一个指定的文件中
String s= m.group();
String[] arr = s.split(" </span>");
if(Integer.parseInt(arr[0])>=25)
{
bw.write("姓名:"+name+"\t\tUID:"+x+"\t"+arr[1]+arr[0]);
bw.newLine();
bw.flush();
}
}
}
}
bw.close();
}
}