正则表达式的浅显学习

正则表达式

本文章将浅显的介绍正则表达式的使用。
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

前言:本文将使用正则验证工具MTracer。
下图为工具界面
在这里插入图片描述
同时此工具可将正则直接转化为所需代码
转化
使用前请将所示勾选在这里插入图片描述
接下来将使用此工具解析正则。

1、\d 一个数组
2、\D 一个非数字
3、\w 一个字母0-9 a-z 不区分大小写
4、\W 一个非字母
5、. 任意一个字符
6、?
1.修饰符 修饰前一个正则出现的次数为0~1次
举例\d?在这里插入图片描述
?的意思是前面的\d只能出现0~1次 如果如图两次就不匹配
2.模式选择(贪婪模式|非)
7、+ 修饰前一个正则出现的次数为1~N次(最少要出现一次)
8、* 修饰前一个正则出现的次数为0~N次
举例在这里插入图片描述
一个非字母+任意
9、[ ] 字符选择器
[0-9] 表示在指定范围中任意取一个字符
[a-z] [A-Z]
[0-9a-zA-Z] 任意满足一个条件的一个字符

举例:验证10-20的数字
在这里插入图片描述
10、() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
寻找符合的字符串 (可用来验证网址或者邮箱)
在这里插入图片描述
分组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加了()后就相当于分割符
关于在这里插入图片描述是老写法 如果是06 就不行
11、{ } 修饰一个数选择器 修饰前一个正则出现的范围
比如\W(非字母)出现的次数在1-3 出现4次就不匹配
在这里插入图片描述
这个是必须5次
在这里插入图片描述
12、\ 转义字符
将{转义 表示这个{ 匹配
在这里插入图片描述
13、 ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 ^。
1. 取非
在这里插入图片描述
不允许前面是135
2. 从左到右匹配
在这里插入图片描述
14、$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 $。
在这里插入图片描述
拓展:一般来说验证中会用到 ^()$ 边界界定符 你的字符串与正则完整匹配

举例在idea中使用正则解析出需求的部分
1、例1 解析日期"1996-5-06"

public static void main(String[] args) {
        String mydate = "1996-5-06";
        String reg = "(\\d{4})-(\\d{1,2})-(\\d{1,2})";

        Matcher m = Pattern.compile(reg).matcher(mydate);
        m.find();
        System.out.println(m.group(3));
        }
使用正则中的()字符串选择器可准确解析出所需的年月日,group(0)/(1)/(2)/(3)分别可解析出完整日期/年/月/日。

2、在一下代码中要求解析出PageName后的网址信息:

{EventCategory=index_开年特价_C6s_8核16G_带宽, browserSize=1366x636, screenColors=24-bit, PageName=https://activity.huaweicloud.com/2020feb_.promotion/index.html, D17=1271, City=西安, type=2, ClientIP=1.80.147.220, Province=陕西, EventLabel=, 'C1=activity, EventAction=click_ _10M, ChannelFrom=Direct, UserAgent=Mozilla/5.0AITA 1./A1AIA1A/(Windows NT 6.1;WOW64)AppleWebKit/537.36.(KHTML,like Gecko) Chrome/69.0.3497.100 Safari/537.36, Value=1, plt=1082, Country=中国, VisitKey=b58221ab-86f8-41a2-8464-e12feba2ed46, screenResolution=1366x768, browserLang=zh-cn}

在不使用jackson的前提下如何比较简洁的提取出所需的网址呢

		String word = "c9770c4dac06fe3b76ec9c7ad47273d0lindex_开年特价_C6s_8核16G_带宽_click_10M|host|202003201014321141{\"EventCategory\":\"index_开年特价_C6s_8核16G_带宽\",\"browserSize\":\"1366x636\",\"PageName\":\"https://activity.huaweicloud.com/2020feb_.promotion/index.html\",\"type\":\"2\",\"'C1\":\"activity\",\"ChannelFrom\":\"Direct\",\"UserAgent\":\"Mozilla/5.0AITA 1./A1AIA1A/(Windows NT 6.1;WOW64)AppleWebKit/537.36.(KHTML,like Gecko) Chrome/69.0.3497.100 Safari/537.36\",\"screenResolution\":\"1366x768\",\"screenColors\":\"24-bit\",\"D17\":\"1271\",\"City\":\"西安\",\"ClientIP\":\"1.80.147.220\",\"Province\":\"陕西\",\"EventLabel\":\"\",\"EventAction\":\"click_ _10M\",\"Value\":\"1\",\"plt\":\"1082\",\"Country\":\"中国\",\"VisitKey\":\"b58221ab-86f8-41a2-8464-e12feba2ed46\",\"browserLang\":\"zh-cn\"}|N33092|+0800|\n";
        String reg = "(.*)(https.*html)(.*)";
        Matcher m = Pattern.compile(reg).matcher(word);
        m.find();
        System.out.println(m.group(2));

在这里插入图片描述
在使用jackson时则比较方便

	String word = "c9770c4dac06fe3b76ec9c7ad47273d0lindex_开年特价_C6s_8核16G_带宽_click_10M|host|202003201014321141{\"EventCategory\":\"index_开年特价_C6s_8核16G_带宽\",\"browserSize\":\"1366x636\",\"PageName\":\"https://activity.huaweicloud.com/2020feb_.promotion/index.html\",\"type\":\"2\",\"'C1\":\"activity\",\"ChannelFrom\":\"Direct\",\"UserAgent\":\"Mozilla/5.0AITA 1./A1AIA1A/(Windows NT 6.1;WOW64)AppleWebKit/537.36.(KHTML,like Gecko) Chrome/69.0.3497.100 Safari/537.36\",\"screenResolution\":\"1366x768\",\"screenColors\":\"24-bit\",\"D17\":\"1271\",\"City\":\"西安\",\"ClientIP\":\"1.80.147.220\",\"Province\":\"陕西\",\"EventLabel\":\"\",\"EventAction\":\"click_ _10M\",\"Value\":\"1\",\"plt\":\"1082\",\"Country\":\"中国\",\"VisitKey\":\"b58221ab-86f8-41a2-8464-e12feba2ed46\",\"browserLang\":\"zh-cn\"}|N33092|+0800|\n";
		// 表达式对象
        String regex2 = ".*(\\{.*PageName\":\"(.*)\".*}).*";
        Pattern p = Pattern.compile(regex2);
        ObjectMapper om = new ObjectMapper();
        // 创建 Matcher 对象
        Matcher m = p.compile(regex2,Pattern.CASE_INSENSITIVE |Pattern.CANON_EQ).matcher(word);
        // 是否找到匹配
        if( m.find())
        {
            String info = m.group(1);
            HashMap map = om.readValue(info,HashMap.class);
            System.out.println(map);
            System.out.println(map.get("PageName"));
        }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值