免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Shell_HAT
打印 上一主题 下一主题

[学习共享] 技术讨论--学习正则表达式 [复制链接]

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
11 [报告]
发表于 2015-03-10 14:57 |只看该作者
本帖最后由 我是一隻羊 于 2015-03-11 12:48 编辑

坐等大神,先分享点自己粗浅的经验...
---------------------------------------------------------------我是分割线-------------------------------------------------------------
我觉得,要用好正则,首先最好要清楚在什么环境什么参数什么命令的表达式里,哪些是元字符,哪些不是..哪些字符需要转义哪些不需要...
我现在走的最常见的弯路就是明明正则匹配的思路对了,但是因为有些该转义的地方没转义,或者是不该转义的地方转义了,导致匹配没能生效.
举个比较直观简单的例子...文件10行,每行都是数字
  1. grep -o '[0-9]+' inputfile
复制代码
是匹配不到数字的...
  1. grep -o '[0-9]\+' inputfile
复制代码
是可以的...
  1. egrep -o '[0-9]\+' inputfile
复制代码
是不行的...
  1. egrep -o '[0-9]+' inputfile
复制代码
是可以的....

然后解决办法是...多用..多总结..反正我自己没能找到一个逻辑去一句话概括它.求大神支招.
--------------------------------------------------------------我也是分割线------------------------------------------------------------
然后再说一些基础的匹配思路..以这两天的另一帖为例..
  1. MAC:10:10:10:AE:CF:73 IP:192.168.1.1
复制代码
以sed为例需要匹配MAC地址
思路1,直接匹配这个MAC地址
观察之后得到mac地址的规则,0-9A-F,然后冒号
一开始的思路一般会是这样的,很容易得
  1. sed -r 's/MAC:(([0-9A-F]{2}[:]{0,1})+).*/\1/g'
复制代码
正则熟悉一点之后会是这样..
  1. sed -r 's/MAC:([0-9A-F:]+).*/\1/g'
复制代码
然后是不是有点长?
思路2,找个框框给把要匹配的内容框起来...
一开始的思路一般会是这样..用前面的MAC:和后面的space给框起来..
  1. sed -r 's/MAC:(.+) .*/\1/g'
复制代码
然后这里会有个问题,就当前这个例子来讲是没问题的,但是如果文本是
  1. MAC:10:10:10:AE:CF:73 IP:192.168.1.1 Justforatest
复制代码
.+会贪婪匹配到最后一个space前.
所以又有了下面这种...
  1. sed -r 's/MAC:([^ ]+).*/\1/g'
复制代码
就没问题了...

这只是一个简单的例子,但是多少能说明一些问题,实现匹配的方法有很多,尤其是在复杂的例子中
可见,如果真的要想掌握正则,用好正则,不能把对我们自己的标准定义为仅仅实现而已.要对效率有追求.
在日常的工作中,要善于学习,CU大神很多..来了这里之后我发现进步很快..不管是不是自己的问题,对于别人给出的答案,都要认真思考,然后学会,一定得抱着这个目的才行.

--------------------------------------------------------------我还是分割线------------------------------------------------------------

然后说一下学习方法....太多了,而且首选CU啊..
不非得一直盯着新帖子看,可以多看一些老帖,有需求,然后下面还有大神的解答,往哪找这好事去?
可以先不看大神的回答,自己先想,看看自己究竟差在哪,练得多了就会发现有时候会跟大神的思路碰上,只是有的地方还不太会写,等再练练,有时候就能和大神的答案对上了!
然后就是看看正则这方面的书了..
而且正则大部分时候是和其他命令一起用的,比如sed,awk什么的,可以多看一些这方面的书.结合起来学习更有效率.
推荐一本awk的书,不让发链接,需要的同学可以私信我.链接只是译文,而且没译完...想看原版的书的同学可以搜一下《The AWK Programming Language》
在工作中也要乐于帮助别人,在帮助别人的时候自己也一定会在进步.

--------------------------------------------------------------分割线又来了------------------------------------------------------------

好吧,最后总结一下
综上所述..要用好正则在我理解大概要分成4步的
1.基础知识掌握
2.掌握正则匹配思路
3.勤加练习
4.多做总结
其实对于大部分知识和技能的学习,以上4步都是适用的....好像又说了很多废话....

以上就是我作为一个菜鸟的全部心得了....希望能帮到同样处在学习阶段的同学们.

-------------------------------------------------------------我是最后的分割线------------------------------------------------------------
上班狗表示编辑完毕....

评分

参与人数 1可用积分 +5 收起 理由
Shell_HAT + 5 感谢分享

查看全部评分

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
12 [报告]
发表于 2015-03-10 14:58 |只看该作者
求学习 求分享

论坛徽章:
0
13 [报告]
发表于 2015-03-10 15:18 |只看该作者
本帖最后由 鬼谷子1110 于 2015-03-10 15:19 编辑

关于正则使用方面的一些体会

正则表达式大家做开发的时候用的还是比较多的,在如javascript,java,.net,php等方面都会用的到,不过相对来说,一般的情况都是,初学者不懂,精通者很精通,没有什么太中间档次的存在了。
当时学的安卓开发,在开发过程中主要是使用java来进行编程的,所以对于一些字符串的截取,服务端返回数据的截取,用的还是比较多的,尤其在处理复杂字符操作的时候,可以提高工作效率,也在一定程度节省代码量。
刚开始接触正则的话,无非就是一些通配符的使用




一般掌握好这个通配符了的话,简单的正则使用需求就可以满足了,而我也就是这个水平,然后复杂的就用不了。
尤其是在具体需求中,比如:
我在做一个安卓应用,显示系统保存的wifi链接记录密码文件的时候,是这样子的。






看到截图的话,大家就明白,我们需要使用的就是ssid和psk的数值了,那么我们在代码中读取后该怎么去操作呢?
最开始没想到用正则,然后直接java截取字符串,读取”network={“到最后的内容作一个字符串,然后再通过subString ,indexOf之类的String字符串之类的来进行截取匹配,然后输出,好麻烦的说。。。
后来想到是不是可以用正则来进行匹配呢?
答案当然是可以得,







简单的正则应用还行,但是在处理一些联网服务器返回数据的时候,对于很多数据用的就不熟练了,而上面的正则表达,也是询问朋友,然后自己上网进行搜索临时学习的,所以感觉学起来要熟练掌握正则的时候真的好麻烦阿,大家有什么经验或者好的资料介绍呢?
求各位前辈不吝赐教,非常感谢~

评分

参与人数 1可用积分 +5 收起 理由
Shell_HAT + 5 感谢分享

查看全部评分

求职 : Linux运维
论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:15:0815-16赛季CBA联赛之山东
日期:2016-10-31 10:40:10综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00IT运维版块每日发帖之星
日期:2016-02-08 06:20:00数据库技术版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-15 06:20:00IT运维版块每日发帖之星
日期:2016-01-10 06:20:00黄金圣斗士
日期:2015-11-24 10:45:10IT运维版块每日发帖之星
日期:2015-09-01 06:20:00IT运维版块每日发帖之星
日期:2015-08-13 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:012015年亚洲杯之巴勒斯坦
日期:2015-05-05 10:19:03
14 [报告]
发表于 2015-03-10 15:25 |只看该作者
先顶下再说!!!!!!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
15 [报告]
发表于 2015-03-10 15:29 |只看该作者
本帖最后由 yinyuemi 于 2015-03-10 15:35 编辑

顶hat兄,顺便留些干货。。。

1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。
grep --color -oP 'xxx' file/string
个人觉得这个灰常适合初学时用,比如
echo '12345abcd' |grep --color -oP '\d'
1
2
3
4
5

echo '12345abcd' |grep --color -oP '\d{2}'
12
34


echo '12345abcd' |grep --color -oP '\d+'
12345

2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
推荐学习perl的正则,虽然。。。
CUer第一次推荐给我用perl正则的时候,我是拒绝的,因为我觉得,你不能让我用我就马上用,第一我要试一下。其实我,根本没学过正则……CUer跟我讲,用grep是加color,匹配结果看起来很清楚……同时用了一个月-P之后呢,艾玛,匹配文本毫不费劲,DUANG~~~我现在呢,每天坚持用-P,这样可以加不少其他很多特技,比如环视(零宽断言),DUANG~~DUANG~~DUANG~~

3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
没怎么用过工具,不过,貌似用过的都说好。不过,我只信赖-P

4、看过几本正则表达式的书籍之后,如何在实际工作中学以致用、融会贯通?
多敲多写,多来CU回答问题,必如有神助,进步飞速

评分

参与人数 1可用积分 +5 收起 理由
Shell_HAT + 5 感谢分享

查看全部评分

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
16 [报告]
发表于 2015-03-10 15:52 |只看该作者
顶 @Shell_HAT !

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
17 [报告]
发表于 2015-03-10 16:13 |只看该作者
回复 1# Shell_HAT


    这个 gif 图碉堡了。

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
18 [报告]
发表于 2015-03-10 16:15 |只看该作者
本帖最后由 刺客阿地 于 2015-03-10 16:41 编辑

1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。

哈哈,好活动。赞一下。老实说,我当初学shell的时候,看的是高级bash脚本指南,这本书当中第三部分进阶 19一章有讲解到正则表达式。
只不过是粗略的讲解。后来就是学习sed和awk的时候,看过sed and awk一书里面的正则表达式。但是这些书里面,没有系统完整的介绍正则表达式
也都是用短短的一章节粗略介绍了正则表达式。平时用sed或者awk处理文本的时候,当中正则表达式是必不可少的。
还好,咱CU群里面的关阴月飞PF大神推荐我看这本正则表达式必知必会,我从第一页一直看到最后,被这本书完全吸引了。书上的例子很多,按照例子多加练习,再结合自己平时处理文本多加练习,对于正则表达式就不那么陌生啦。最主要还是多动手实践,用sed,awk ,grep加上正则去处理需要的文本,那就进步神速呀。

2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?

我觉得,还是看各种工具的规定吧。sed里面的正则用法,跟shell里面不同。在sed里面使用正则的时候,也许需要借助sed的对正则支持的参数。 同样,grep也一样有对正则使用的规定,各个工具的用法都不同。主要还是多写多练,然后记住这些工具在引用正则的规定。shell里面的正则,我觉得应该算是比较规矩一些,不像文本处理工具那样要求严格。 perl不了解。我也是新手菜鸟,只是自己的浅薄观点,也许说的不对,请大牛指正,我是来学习的,哈哈。

3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
离线的貌似有这个Regex Match Tracer   在线的网上很多,就不说了,随便百度找下,就能找到在线测试正则的工具。

4、看过几本正则表达式的书籍之后,如何在实际工作中学以致用、融会贯通?


哈哈,我觉得看过本活动当中的正则表达式必知必会就行了,其他正则的书就不用去细看了,看太多,也不见得都能用上。这本必知必会看完,90%的文本处理上的正则表达式方法都可以灵活运用了吧。最主要还是多写多练,多思考。我也是菜鸟,坐等大牛分享更好的经验。

评分

参与人数 1可用积分 +5 收起 理由
Shell_HAT + 5 感谢分享

查看全部评分

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
19 [报告]
发表于 2015-03-10 16:33 |只看该作者
一招鲜,吃遍天啊回复 15# yinyuemi


   

论坛徽章:
2
白羊座
日期:2014-06-17 11:04:28午马
日期:2014-12-29 15:37:13
20 [报告]
发表于 2015-03-10 16:38 |只看该作者
  撸过绑定,露个脸~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP