正则表达式

一、规则

java.util.regex类 Pattern需要掌握的规则表
字符
x 字符 x
\ 反斜线字符
字符类
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为捕获组

捕获
Pattern和Matcher类的使用
打开api,查看Pattern类,有他们的使用规则
首先,掌握使用规则(api的案例是判断功能)
其次,掌握其真正的作用(获取功能)
boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
String group() 返回由以前匹配操作所匹配的输入子序列。

二、案例

/**
 * 案例:验证手机号码
 * 规则: 11位; 全数字 ;以1开头
 * 
 * 正则表达式: 描述一组特定规则的字符串
 *
 */

public class Test2 {
	public static void main(String[] args) {
		//判断是否为手机号码
		String phone="15838383383";
		boolean result = phone.matches("1[358][0-9]{9}");  //"1[358]\\d{9}"
		if(result){
			System.out.println("是手机号码....");
		}else{
			System.out.println("不是手机号码...");
		}
	}

	
}

/**

  • 案例: 判断是否为邮箱

  • 规则:不能以@开头;不能以.结尾; @和.不能挨着; xxx@xxx.xxx

    1. 使用正则表达式:

*/
public class Test3 {
public static void main(String[] args) {

	//2. 使用正则表达式:
	String email = "lhp@163.com";
	boolean result = email.matches("\\w+@\\w+[.]\\w+");  //\\.
	if(result){
		System.out.println("是邮箱格式");
	}else{
		System.out.println("不是邮箱格式");
	}
}
}
public class Test {
	public static void main(String[] args) {
		
		//练习1:搜索好友,年龄在18-38之间
		String age = "18-38";
		String[] a = age.split("-");
		int start = Integer.parseInt(a[0]);  //将字符串转int
		int end   = Integer.parseInt(a[1]);  //将字符串转int
		for(int i=start;i<=end;i++){
			System.out.println(i);
		}
		
		System.out.println("===============");
		//练习2:将字符串转换成数字数组,比如”1,2,3,4,5,6”
		String b = "1,2,3,4,5,6";
		String[] bs = b.split(",");
		int[] as = new int[bs.length];
		for(int i=0;i<bs.length;i++){
			as[i] = Integer.parseInt(bs[i]);
		}
		System.out.println(Arrays.toString(as));
		
		System.out.println("===============");
		//练习3:获取用户信息,以“|”隔开,18|38
		String c = "18|38";
		String[] cs = c.split("\\|");
		System.out.println(Arrays.toString(cs));
	}
}

//替换功能: replaceAll

public class Test {
	public static void main(String[] args) {
		String a = "暴力的黄色小说很暴力";
		
		//内容的完全匹配: replace 与 replaceAll一致
		System.out.println(a.replace("暴力", "xx"));
		System.out.println(a.replaceAll("暴力", "yy"));
		
		String b = "发的是规范多13837454545少个fdgsfdggsrd东13635356353方故事的分隔";
		System.out.println(b.replaceAll("1[358]\\d{9}", "**********"));
	}
}
/**
 * 获取功能:
 *
 */
public class Test {
	public static void main(String[] args) {
		String a = "水电费都是固定lhp@163.com梵蒂冈电2566545@qq.com饭锅";
		//获取Pattern对象,并传入获取邮箱的规则
		Pattern pattern = Pattern.compile("\\w+@\\w+[.]\\w+");
		Matcher matcher = pattern.matcher(a); //将内容传入
		while(matcher.find()){ //判断能否找到匹配的内容
			System.out.println(matcher.group());  //找到则获取出来
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值