如何使用正则表达式+常用示例

字符类

  1. [abc]:代表a或者b,或者c字符中的一个。
  2. [^abc]:代表除a,b,c以外的任何字符。
  3. [a-z]:代表a-z的所有小写字符中的一个。
  4. [A-Z]:代表A-Z的所有大写字符中的一个。
  5. [0-9]:代表0-9之间的某一个数字字符。
  6. [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之间的任意一个字符。
  7. [a-dm-p]:a 到 d 或 m 到 p之间的任意一个字符。

逻辑运算符

  1. &&:并且

  2. | :或者

  3. \:转义字符

    // 代码示例
    // 1.要求字符串是小写辅音字符开头,后跟ad
    String regex = "[a-z&&[^aeiou]]ad"
    // 2.要求字符串是aeiou中的某个字符开头,后跟ad
    regex = "[a|e|i|o|u]ad"; // 相当于 regex = "[aeiou]ad";
    // 3.要求以字符串的形式打印一个双引号
    System.out.println("\"");
    

预定义字符

  1. “.” : 匹配任何字符;
  2. “\d”:任何数字[0-9]的简写;
  3. “\D”:任何非数字[^0-9]的简写;
  4. “\s”: 空白字符:[\t\n\x0B\f\r]的简写;
  5. “\S”: 非空白字符:[^\s] 的简写;
  6. “\w”:单词字符:[a-zA-Z_0-9]的简写
  7. “\W”:非单词字符:[^\w]

数量词

  1. X? : 0次或1次
  2. X* : 0次到多次
  3. X+ : 1次或多次
  4. X{n} : 恰好n次
  5. X{n,} : 至少n次
  6. X{n,m}: n到m次(n和m都是包含的)

练习

	// 1.编写正则表达式验证用户输入的手机号码是否满足要求
	// 第一部分:1 表示手机号码只能以1开头
	// 第二部分:[3-9] 	表示手机号码第二位只能是3-9之间
	// 第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次
	String cellPhone = "1[3-9]\\d{9}";
	
	// 2.编写正则表达式验证用户输入的邮箱号是否满足要求
	// 第一部分:@的左边 \\w+ 任意字母数字下划线,至少出现一次就可以了
	// 第二部分:@ 只能出现一次
	// 第三部分:
	//			3.1:.的左边 [\\w&&[^_]]{2,6} 任意的字母加数字,总共出现2-6次(不能出现下划线)
	// 			3.2:. \\.
	//			3.3:大小字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}
	//			把3.2和3.3看成一组,这一组可以出现1次或者2次
	String email = "\\w@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
	
	
	// 3.编写正则表达式验证用户输入的电话号码是否满足要求
	// 第一部分:区号 0\\d{2,3}
	//				0 表示区号一定是以0开头的
	//				\\d{2,3} 表示区号从第二位开始可以是任意的数字,可以出现2-3次
	// 第二部分:-? 表示"-"出现次数,0次或1次
	// 第三部分:号码 [1-9]\\d{4,9} 号码的第一位也不能以0开头,从第二位开始可以是任意的数字,号码的总长度为5-10位
	String telephone = "0\\d{2,3}-?[1-9]\\d{4,9}";

贪婪爬取与非贪婪爬取

只写+ 和 * 表示贪婪匹配,如果在+和 * 后面加? 表示非贪婪爬取

  • +:贪婪匹配

  • *:贪婪匹配

  • +?:非贪婪匹配

  • *?:非贪婪匹配

  • 贪婪爬取:在爬取数据的时候尽可能的多获取数据

  • 非贪婪爬取:在爬取数据的时候尽可能的少获取数据

  • 举例:

    如果爬取数据:ab+

    贪婪爬取获取结果:abbbbbbbb

    非贪婪爬取获取结果:ab

分组

  • 分组括号()

  • \\组号:表示把第X组的内容再用一次,如何识别组号,只看左括号不看右括号

  • 分组练习

    // 需求:把重复的内容替换为单个的
    String str = "我要学学编编编编程程程程程程";
    // (.) 表示把重复内容的第一个字符看做一组
    // \\1 表示第一组字符再次出现
    // +   表示至少一次
    // $1  表示把正则表达式中第一组的内容,再拿出来用
    String result = "str.replaceAll("(.)\\1+","$1");
    System.out.println(result);
    

忽略大小写的写法

  • (?i):表示忽略后面数据的大小写
  • 例如:"(?i)abc”:表示忽略abc的大小写

非捕获分组

  • 分组之后不需要再用本组数据,仅仅是把数据括起来。
  • (?:) (?=) (?!):都是非捕获分组,更多使用第一个
  • 例如:"[1-9]\d{16}(?:\d|x|x)\1”:报错,因为(?:)是非捕获分组,此时是不占用组号的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值