黑马程序员-正则表达式

------- android培训java培训、期待与您交流! ----------
正则表达式:符合一定规律的表达式。
特点:通过一些特定符号来操作字符串
好处:专门用于操作字符串,可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差


[ abc]:a b c 中的一位字符
[^abc]:除掉abc的其他字符
[a-z]:小写字母
[a-z&&[^bc]]:小写字母除了bc
\d:数字
\D:非数字
\s:空白字符
\w:单词字符:[a-zA-Z_0-9] 
^:行的开头
$:行的结尾
X?:一次或一次也没有
X*:零次或多次
X+:一次或多次
X{n,m}:X至少n次,但不超过m次



具体操作功能:
1.匹配:String matches
用规则匹配指定字符串,字符串必须全部符合规则,如果有一处不符合规则,返回false。
2.切割:String split
\有转义的效果
()代表组,组按顺序编号(从1开始) 组中的内容可以被重用 ,想要使用组的内容,可以使用\n(n是组的标号)来获取  如"(.)\\1+"
3.替换:String replace
String str1 = "erkktyqqquizzzzzosfddd";//将重叠的字符替换成单个字符 使用$
replaceAllDemo(str1,"(.)\\1+","$1");//使用$加组号
4.获取:将字符串中符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象
2.让正则表达式和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出


String str = "ming tian jiu yao fang jia le ";


String reg = "\\b[a-z]{3}\\b";


//将规则封装成对象
Pattern p = Pattern.compile(reg);


//让正则对象和要作用的对象相关联,获取匹配器对象
Matcher m = p.matcher(str);
	
while(m.find())//将规则作用到字符串上,并进行符合规则的子串查找
{
	System.out.println(m.group());//用于获取匹配后的结果
	System.out.println(m.start()+"..."+m.end());
}

到底用四种功能中的哪一个呢?
1.如果只想知道该字符串是对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串。




邮箱验证:
String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配
String reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配

ip地址排序和邮箱验证:
import java.util.regex.*;
import java.util.*;
class RegexDemo2 
{
	public static void main(String[] args) 
	{
		//checkMail();
		ipSort();
	}
	public static void checkMail()//邮箱验证
	{
		String mail = "abc234@sina.com";


		String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配
		reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配


		System.out.println(mail.matches(reg));
	}
	public static void ipSort()//ip排序
	{
		String ip = "192.68.1.254 10.10.10.10 2.8.60.10 107.12.3.120";


		ip = ip.replaceAll("(\\d+)","00$1");


		System.out.println(ip);


		ip = ip.replaceAll("0*(\\d{3})","$1");


		System.out.println(ip);


		String[] str = ip.split(" ");


		Arrays.sort(str);


		for(String s : str)
		{
			System.out.println(s.replaceAll("0*(\\d+)","$1"));
		}
	}
}
获取网页上的邮箱地址:
import java.io.*;
import java.net.*;
import java.util.regex.*;


class  MailGet
{
	public static void main(String[] args) throws Exception
	{
		//System.setOut(new PrintStream("mail.txt"));
		URL url = new URL("http://zhidao.baidu.com/question/506816708.html");


		URLConnection ucon = url.openConnection();


		BufferedReader bufr =
			new BufferedReader(new InputStreamReader(ucon.getInputStream()));


		String line = null;
		String mailReg = "\\w+@\\w+(\\.\\w+)+";


		Pattern p = Pattern.compile(mailReg);


		while((line=bufr.readLine())!=null)
		{
			Matcher m = p.matcher(line);


			while(m.find())
			{
				System.out.println(m.group());
			}


		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值