正则表达式-字符串基本的匹配,拆分,替换和截取

如果没有正则表达式,那么字符串的一些操作将会特别困难。

一个手机号的格式为:1、前3位必须为131,150,183,151,137等等;2、必须是11位;3、必须都是数字。

判断一个手机号是否合法,就会有很多的判断语句,将会特别麻烦,这时候就需要正则表达式了。

一、字符串的匹配

String类中有一个Boolean matches(String regex) 方法,用于判断字符串是否合法。用法如下:

public class MatchesDemo {

	public static void main(String[] args) {
		//定义几个字符串 有合法的手机号和不合法的手机号
		String phoneNum1 = "15101234567";//合法
		String phoneNum2 = "18301234567";//合法
		String wrongNum1 = "151012345670";//多一位
		String wrongNum2 = "12301234567";//前三位不挣钱
		String wrongNum3 = "1510123456a";//使用了字母
		String wrongNum4 = "1510123456";//少一位
		checkNum(phoneNum1);
		checkNum(phoneNum2);
		checkNum(wrongNum1);
		checkNum(wrongNum2);
		checkNum(wrongNum3);
		checkNum(wrongNum4);
	}
	private static void checkNum(String num){
		/*匹配规则的定义,我们加入手机号的号段有:183,151,150
		 * "((183)|(151)|(150))"表示手机号前三位可以为183或者151或者150
		 * \\d表示数字,也可以用[0-9]表示
		 * {8}表示 //d 为8位
		 * */
		String regex = "((183)|(151)|(150))\\d{8}";
		if(num.matches(regex)){
			System.out.println(num+":合法");
		}else{
			System.out.println(num+":不合法");
		}
	}
}

打印结果如下:


二、字符串的拆分

如果我们需要将一个字符串如:"编程之美.pdf,大话数据库.pdf,大话数据结构.mobi"拆分成一个数组,对书名分别进行处理,

我们就需要用到String类的String[] split(String regex)方法。

public class SplitDemo {

	public static void main(String[] args) {
		String books = "编程之美.pdf,大话数据库.pdf,大话数据结构.mobi"; 
		/*
		 * ((.pdf)|(.mobi))表示前面的字符串为.pdf或者.mobi
		 * ,? 表示逗号出现一次或没有
		 */
		String regex = "((.pdf)|(.mobi)),?";
		String[] bookArr = books.split(regex);
		for(String book:bookArr){
			System.out.println("您买的书有:"+book);
		}
	}

}
打印结果如下:

三、字符串的替换

有时候我们确实需要替换字符串,比如我们将文字中某些特征的一些内容去掉。

如:"<span>这些需要替换掉,请替换成:哈哈哈</span>这些不要替换<span>这些需要替换掉</span>"

package com.demo.cc;

public class ReplaceAllDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "<span>这些需要替换掉,请替换成:哈哈哈</span>这些不要替换<span>这些需要替换掉</span>";
		/*
		 * <span>为前缀,</span>是后缀
		 * .表示任意字符,*表示零次或多次
		 * ?表示非贪婪模式,默认为贪婪模式
		 * 贪婪模式会尽可能长的匹配字符串,非贪婪模式尽可能短的匹配字符串
		 * 
		 */
		//非贪婪模式
		String regex1 = "<span>.*?</span>";
		//贪婪模式
		String regex2 = "<span>.*</span>";
		
		String newStr1 = str.replaceAll(regex1, "哈哈哈");
		System.out.println("非贪婪模式匹配:"+newStr1);
		String newStr2 = str.replaceAll(regex2, "哈哈哈");
		System.out.println("贪婪模式匹配:"+newStr2);
		
	}

}
结果如下:


四、字符串的截取

接下来的功能,是要截取字符串中的一段网址,需要用到Pattern类和Matcher类

package com.demo.cc;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MatcherDemo {

	public static void main(String[] args) {
		String str = "我们的网址是:http://blog.csdn.net/w496272885,快来看看吧";
		/*
		 * .表示任意字符,*表示零个或多个,默认使用了贪婪模式。
		 * \d表示任意数字,也表示截取的最后一位是数字
		 * 由于\在正则表达式中为特殊字符,所有需要转义,所以使用了\\d
		 */
		String regex = "http.*\\d";
		//这里将正则表达式编译并赋给Pattern类
		Pattern pattern = Pattern.compile(regex);
		//使用Matcher去保存匹配到的内容,matcher()方法去匹配字符串
		Matcher matcher = pattern.matcher(str);
		//matcher.find()判断是否有对象,可能匹配到多个,所以使用while循环
		while(matcher.find()){
			System.out.println(matcher.group());
		}

	}

}
结果如下:

当然,这些都是最基本的操作,更详细的内容,还需要自己去深入挖掘,学海无涯,望多多交流。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页