正则表达式

14 篇文章 0 订阅
---------- android 培训 java培训 、java学习型技术博客、期待与您交流!------------ 

一、正则表达式的理解

1、定义:用来操作字符串的一些规则,符合一定规则的表达式。

2、好处:对字符串的复杂操作变得更为简单。

3、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。

4、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。

二、正则表达式的常见操作

1、匹配: boolean matches(String regex) 方法,(告知此字符串是否匹配给定的正则表达式)用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
/*
对手机号码进行匹配
手机号段只有 13xxx 15xxx 18xxxx,一共有11位
*/
public class RegexDemo1 {

	public static void main(String[] args) {
		// 自定义一个任意格式的号码进行匹配。
		String tel = "13850529145";
		String telReg = "1[358]\\d{9}";// 定义用于验证的正则表达式
		boolean flag = tel.matches(telReg);
		System.out.println(flag);
	}
}
2、切割:string split(String  reges)根据正则表达式的匹配拆分此字符串。
/*
对含有空格的字符串进行切割。
*/
public class RegexDemo2 {

	public static void main(String[] args) {
		String str = "zhang li chae fed";// 定义一个含有空格的字符串。
		String reg = " +";// 按照多个空格来进行切割。
		String[] arr = str.split(reg);// 切割。
		System.out.println(arr.length);
		for (String s : arr) {// 打印出数组中的每个元素。
			System.out.println(s);
		}
	}
}
3、替换: String replaceAll(String reges ,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
/*
对字符串进行替换。
*/
public class RegexDemo3 {

	public static void main(String[] args) {
		String str = "erkktyqqquizzzzzo";
		str.replaceAll("(.)\\1+", "$1");// 将叠词替换成$. //将重叠的字符替换成单个字母。zzzz->z
	}
}
4、获取:
(1)、将将正则表达式封装成对象。
(2)、让正则对象和要操作的字符串相关联。
(3)、关联后,获取正则匹配引擎。
(4)、通过引擎对符合规则的子串进行操作,比如取出。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo {

	public static void main(String[] args) {
		String str = "ming tian you shi xin de yi tian";
		System.out.println(str);
		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、对邮件地址进行校验
public class CheckMail {

	public static void main(String[] args) {
		String mail = "abc12@sina.com";

		String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";// 较为精确的匹配。
		reg = "\\w+@\\w+(\\.\\w+)+";// 相对不太精确的匹配。

		// mail.indexOf("@")!=-1
		System.out.println(mail.matches(reg));
	}
}
2、将下列字符串转成:我要学编程
/*
思路方式:
1,如果只想知道该字符是否对是错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
*/
public class RegexText {

	public static void main(String[] args) {
		String str = "我我...我..我要..要要..要要..学学学...学学...编编...编程..程.程..程..程";
		/*
		将已有字符串变成另一个字符串。使用 替换功能。
		1,可以先将 . 去掉。
		2,在将多个重复的内容变成单个内容。
		*/
		str = str.replaceAll("\\.", "");
		System.out.println(str);
		str = str.replaceAll("(.)\\1+", "$1");
		System.out.println(str);
	}
}
3、将ip地址进行地址段顺序的排序。
import java.util.TreeSet;
/*
192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
将ip地址进行地址段顺序的排序。


还按照字符串自然顺序,只要让它们每一段都是3位即可。
1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
2,将每一段只保留3位。这样,所有的ip地址都是每一段3位。

*/
public class RegexText {

	public static void main(String[] args) {
		String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";

		ip = ip.replaceAll("(\\d+)", "00$1");// 将IP地址的每一段开头添加两个0。
		System.out.println(ip);

		ip = ip.replaceAll("0*(\\d{3})", "$1");// 将IP地址的每一段只保留3位。
		System.out.println(ip);

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

		TreeSet<String> ts = new TreeSet<String>();

		for (String s : arr) {
			ts.add(s);
		}

		for (String s : ts) {
			System.out.println(s.replaceAll("0*(\\d+)", "$1"));// 将IP地址还原。
		}
	}
}
4、网页爬虫
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

	public static void main(String[] args) {

	}
	/*
	获取指定网址中的邮件地址。
	使用获取功能。Pattern  Matcher
	*/
	public static void getMail_1()throws Exception{
		URL url = new URL("http://localhost:8080/myweb/mail.html");
		
		URLConnection conn =url.openConnection();//创建网页链接
		
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		
		String line = null;
		
		String mailReg = "\\w+@\\w+(\\.\\w+)+";
		Pattern p = Pattern.compile(mailReg);
		
		while ((line = bufIn.readLine())!=null) {
			Matcher m = p.matcher(line);
			while (m.find()) {
				System.out.println(m.group());
			}
		}
	}
}
四、小结
增长表达式是用于字符匹配,在邮箱格式验证上有广泛的应用。要熟记匹配的规则和操作,做好心中有数。


----------android培训java培训、java学习型技术博客、期待与您交流!------------ 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值