黑马程序员_正则表达式

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

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

作用:用于专门操作字符串。

特点:用一些特定的符号来表示一些代码操作,简化书写。

好处:简化了对字符串的复杂操作。

弊端:符号定义越多,正则表达式越长,阅读性越差。

正则表达式的规则

1、中括号"[ ]":括号内表示字符串中某个字符位置字符的取值范围。

[abc]abc(简单类)
[^abc]任何字符,除了 abc(否定)
[a-zA-Z]azAZ,两头的字母包括在内(范围)
[a-d[m-p]]admp[a-dm-p](并集)
[a-z&&[def]]def(交集)
[a-z&&[^bc]]az,除了 bc[ad-z](减去)
[a-z&&[^m-p]]az,而非 mp[a-lq-z](减去)

2、预定义的字符类:

.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]

3、数量词

Greedy 数量词
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m

4、边界匹配器

边界匹配器

^

行的开头

$

行的结尾

\b

单词边界

\B

非单词边界

\A

输入的开头

\G

上一个匹配的结尾

\Z

输入的结尾,仅用于最后的结束符(如果有的话)

\z

输入的结尾


具体的操作功能

1、匹配:String   matches(String reg)方法。用规则匹配整个字符串,只要有一处不符合就匹配结束返回flase

定义一个字符串规则:String reg;

把reg这个规则作为参数传递给matches方法,此方法返回boolean。

2、切割:String[] split(String reg);

定义一个String reg规则作为参数传递给split方法,此方法按照规则切割字符串并返回一个String类型的数组。

3、替换:replaceAll(String regex,String replacement) ;

 使用给定的 replacement 替换此字符串所有匹配给定的这则表达式regex的子字符串。

4、获取:将字符串中符合规则的字串取出。

概括的说就是将规则封装成对象(Pattern),然后把对象和要操作的对象关联起来(Matcher)进行操作。

1、将正则表达式封装成对象。 public final classPatternextendsObjectimplementsSerializable 正则表达式的编译表示形式,可以描述正则表达式,将正则表达式封装。

Pattern类没有直接的构造函数,可以使用类方法compile(String regex)返回一个编译了regex规则的Pattern对象。

2、使用Pattern中的方法Matcher将正则表达式对象和要操作的字符串关联,返回一个Matcher对象。

 Matcher

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

Matcher类中包含大量的方法可以操作字符串。

3、关联后,获取正则匹配引擎。

4、通过引擎对符合规则的字串操作,比如:取出。

import java.util.regex.*;
class  RegexDemo2
{
	public static void main(String[] args) 
	{
		getDemo();
	}

	public static void getDemo()
	{
		String str = "ming tian jiu yao fang jia le, da jia.";

		String reg = "[a-z]{3}";
		
		//Pattern没有构造器,使用类方法compile方法封装一个编译了reg规则的Pattern对象
		Pattern p = Pattern.compile(reg);
		
		//让正则对象和要作用的字符串相关联,获取匹配器对象。
		Matcher m = p.matcher(str);
	
	/*以下方法类似一个迭代器,会依次的寻找符合规则的下一个子串
		//将规则作用到字符串上,并进行符合规则的字串查找。
		boolean b = m.find();
		System.out.println(b);
		
		//获取匹配到的一个结果 第一次输出min
		System.out.println(m.group());
	*/
		//所以可以使用循环的方法依次寻找子串
		while (m.find)
		{
			//获得字串在字符串中的开始角标和末尾角标
			System.out.println(m.start()+"..."+m.end());
			
			System.out.println(m.group());
		}
	}
}

网页爬虫的练习:

<pre name="code" class="java">import java.util.regex.*;
import java.io.*;
class  RegexTest2
{
	public static void main(String[] args) 
	{
		getMails();
	}

	public static void getMails() throws Exception
	{
		//这里的源是文本文件
		//如果是网页的话可以通过URL地址获得数据作为源
			/*
				URL = new URL("http://192.168.1.254:8080/myweb/mail.html");
				URLConnection conn = url.openConnection();
				BufferedReader buffIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			*/
		BufferedReader buff = 
			new BufferedReader(new FileReader("mail.txt");
		String line = null;

		//定义邮箱地址的正则规则
		String mailregex = "\\w+@\\w+(\\.\\w+)+);
		//将邮箱正则规则封装成Pattern对象
		Pattern p = Pattern.compile(mailregex);

		//每次从流中读取一行,并把这一行作为要操作的数据与正则对象关联
		//然后使用find方法依次匹配符合规则的子串用group获取
		while((line = buff.readline()) != null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
	}
}

----------------------  ASP.Net+Android+IOS开发 .Net培训 、期待与您交流! ----------------------

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值