正则表达式案例——带你读懂正则表达式

怎么学习正则表达式——轻松学会让人眼花的正则表达式

本文利用之前的案例数据访问日志数据进行分析。

日志文件的格式主体上是以单个空格来分割的,理论上可以以空格来将他进行分割,但是有一些数据里面自带了空格,所以我们就不能单纯的以文本分割的形式来对他进行分割。所以使用正则表达式来对数据进行分割。
定义:
正则表达式描述了一种字符串的匹配模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式字符说明:
在这里插入图片描述
在这里插入图片描述
百讲不如一练,看例题
例如利用正则表达式来对这一条日志进行数据提取。
日志数据:
314 116.227.136.48 - - [21/Aug/2017:23:59:12 +0800] “POST /study/updateDurationVideo.mooc HTTP/1.1” 200 2 “http://www.chinamoocs.com/study/initplay/602.mooc” “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36”

我们先把这条数据进行分解,由于他的每一条属性都是以空格进行分割的,分割后得到以下多条属性。我们对每条属性进行详细说明。

314 :代表这条数据的序号,也就是id

116.227.136.48:代表IP地址

- -”:无意义数据,丢弃

[21/Aug/2017:23:59:12 +0800] :代表访问时间

"POST /study/updateDurationVideo.mooc HTTP/1.1" :代表访问链接

200:代表访问状态码

2:传输字节数

"http://www.chinamoocs.com/study/initplay/602.mooc" :访问来源

"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36":客户端信息

用这条语句来提取 regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 1), ’ $’, ’ ')

表达式说明:
[ [ ] .*? [ ] ] : 表示括号里的字符取原来的意思,这里的括号相当于转义字符。这里取得就是
以 “[” 开头到 “]” 结尾的内容。" . “代表任意字符,” * “代表零次或多次,” ?"代表非贪婪模式获取。这里取的属性就是 [ ] 里的属性。

" .*? " :这里取的属性就是“引号”里的数据。

.*? :既不是括号,也不是引号的就用这种方式提取。

" | ":代表“或者”的意思,这里一共有三组匹配模式,取到其中任意一种即可。

1, 1:第一个1表示从第一个字符开始使用正则表达式,第二个1表示匹配到字符的次数,这里表示取第一次匹配到的值。第一次匹配到的值为 314 。所以匹配到了id。

’ $’, ’ ’ :将’ $‘替换为’ ’ ,就是一个去末尾空格的操作。
这是这段正则表达式含义。

提取数据:
regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 1), ’ $’, ’ ')
当参数为1的时候匹配到的值为id。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 2), ’ $’, ’ ')
当参数为2的时候匹配到的值为ip地址

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 3), ’ $’, ’ ')
当参数为3的时候匹配到的值为“—”。数据无用,舍弃。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 4), ’ $’, ’ ')
当参数为4的时候匹配到的值为“—”。数据无用,舍弃。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 5), ’ ^ [ [ ] | [ ] ] $’, ’ ')
当参数为5的时候匹配到的值为【】里的内容,也就是访问时间。这里需要将符号【】转换为空格,进行去空格操作。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 6), ’ ^" | " $’, ’ ')
当参数为6的时候匹配到的值为访问链接。这里需要将 " " 转换为空格,进行去空格操作。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 7), ’ $’, ’ ')
当参数为7的时候匹配到的值为访问状态码。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 8), ’ $’, ’ ')
当参数为8的时候匹配到的值为传输字节数。

regexp_substr(content, ’ [ [ ] .? [ ] ] | " .? " | .*? ‘, 1, 9), ’ ^" | " $’, ’ ')
当参数为9的时候匹配到的值为访问来源。这里需要将 " " 转换为空格,进行去空格操作。

regexp_substr(content, ’ " .*?" ‘, 1, 3), ’ ^" | " $’, ’ ')
由于最后一段数据末尾没有空格,所以我们要用匹配到 " " 里的第三次的内容来提取他。所以提取方式要 为 " " 引号里的,且匹配次数为第三次的数据。

到这里就可以完整的提取出日志文件里的所有属性了。没看懂的建议把数据用不同的颜色标出来,将表达式带入到数据里面对比着看,虽然看起来很多符号,但是分解开来就是很简单的东西。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值