『Java』网络编程--正则表达式

RegEx

正则表达式:符合一定规则的表达式

作用:用于专门操作字符串[操作字符串的一种规则]

特点:用一些特定的符号来表示一些代码操作.这样就可以简化书写

好处:可以简化对字符串的复杂操作

弊端:符号定义越多,正在越长,阅读性越差….

学习正则表达式,就是在学习一些特殊符号的作用.

具体操作功能:

1,匹配match-es[匹配]

 

 boolean

matches(String regex)将regex正则表达式作用到该字符串上 
告知此字符串是否匹配给定的正则表达式

用规则匹配整个字符串,只要有一处不符合,就返回flase.

 

 

 

 

 

2,切割sp-lit[劈开]

String[]

split(String regex) 
          根据给定正则表达式的匹配拆分此字符串。

 String[]

split(String regex, int limit) 
       根据匹配给定的正则表达式来拆分此字符串。

注意:  ((A)(B(C)))-----一共为四组,只要看单个的开括号就成了.

 

3替换re-pla-ce[替换]

 String

replaceAll(String regex, String replacement) 
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

 

 

 

 

 

4,获取

Patt-ern[模式]  com-pile[编译] mat-cher[匹配器] se-quence [数][计] 序列

字符串中的符合规则的子串取出

操作步骤:

>1,将正则表达式封装成对象Pattern p=Patterncompile(String regex);

>2,让正则对象和要操作的字符串相关联,并获取正则匹配引擎

Matcher m=p. matcher(CharSequence input)

>3,通过引擎对符合规则的子串进行操作,比如取出.

java.util.regex 
类 Pattern

static Pattern

compile(String regex) 
          将给定的正则表达式编译到模式中。

 Matcher

matcher(CharSequence input) 
      创建匹配给定输入与此模式的匹配器。

 

 

 

java.util.regex 
类 Matcher

 boolean

find() 
  尝试查找与该模式匹配的输入序列的下一个子序列。

 String

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();
		 
	}

}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值