Java中的正则表达式



前言

  • 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。
  • 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
  • 通过正则表达式处理字符串复杂的查找/替换/匹配/分割工作。

实例

概念

使用单个字符串来描述/匹配一系列符合某个语法规则的字符串

步骤
  1. 通过大量的字符串找规律定义规则。
  2. 使用这种规则去匹配新的字符串。
  3. 匹配成功作出相应的操作(匹配 查找 替换 分割)。
工具

Regexper

字符

正则表达式由两种基本字符组成
原义字符:字符本身就是一个正则 \t \n \r \f
元字符: * + ? $ ^ () [] {}…

对正则表达式进行分类:

  • 字符类: [abc] 将字符进行归类,可以出现[]中的其中一个 对abc其中一个进行匹配
    [^abc] 对不是abc的字符进行匹配

  • 范围类:
    [a-z] 表示代表a-z中的一个字符
    表示所有的英文字母和数字 [a-zA-Z0-9]

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

  • 边界字符
    ^:以XXX开头
    $:以XXX结尾
    \b:单词边界
    \B:非单词边界

  • 量词
    ?:出现0次或者1次
    +:出现1次或者多次
    *:出现任意次
    {n}:出现正好n次
    {n,m}出现n-m次
    {n,}出现至少n次

  • 分组 ()
    如何让Jack出现至少3次
    (Jack){3,}
    忽略分组:每一组能够分组,但是没有编号 ?:

    Ja(ck|Love)Kitty

  • 反向引用
    利用分组的编号进行反向引用
    反向引用使用$,必须先分组
    2018-04-27 ==> 04/27/2018

在Java中的应用
   1.字符串查找操作  Pattern和Matcher
   2.字符串匹配操作 字符串的matches()方法
   3.字符串替换操作 字符串的replaceAll()和replaceFirst()方法
   4.字符串分割 split() 方法

测试

验证手机号
匹配如下四个手机号
18079243050
15160869850
18765068050
14235452850
- 分析:
1.以1开头
2.一共11位
3.50结尾
4.倒数第三位是 0 或者 8
public class Test424_1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入手机号");
		String s  = input.next();
		String regex = "^1[0-9]{7}(0|8)(50)$";
		System.out.println(s.matches(regex));	
	}
}
日期替换
   2016/03/05
   demo/07/ss
   1993/08/05
   2016/11/24
   12345/23/45678
   12345/24/3356
   1993-08-05
   将正确的日期格式替换为03-05-2016
- 分析:
1.原日期为年月日
2.替换日期为月日年
3.利用分组()和$反向引用
public class Test424_3 {
	public static void main(String[] args) {
		String s =  " 2016/03/05 "
				+ 	" demo/07/ss"
				+	" 1993/08/05"
				+	" 2016/11/24"
				+	" 12345/23/45678"
				+	" 12345/24/3356"
				+	" 1993-08-05";
		String regex  ="\\b(\\d{4})[/-](\\d{2})[/-](\\d{2})\\b";
		System.out.println(s.replaceAll(regex, "$2-$3-$1"));
	}
}


推荐书籍:《正则表达式必知必会》

以上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值