免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
21 [报告]
发表于 2015-03-10 16:42 |只看该作者
@我是一隻羊牛学习了。。。

论坛徽章:
1
戌狗
日期:2013-10-24 11:22:04
22 [报告]
发表于 2015-03-10 16:50 |只看该作者
1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。
    模仿!然后从简单的句式里明白内容!然后替换,直到不对了,就明白了!

2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
   
  困惑就说明有不同!然后就提醒自己,各有所长,各有所短!找到差别,最好记下来,备查!还有主要的就是CU的网站,多来网站里看看!学习学习!试着回答问题应该是最好的方法了。

3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
   
只有一本sed和awk,(O‘REILLY)照着上面的练习做练习,不知道还有工具!

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

   如果有几本书的话,就是多练习,多思考、多替换!

评分

参与人数 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
23 [报告]
发表于 2015-03-10 17:28 |只看该作者
本帖最后由 blackold 于 2015-03-10 19:36 编辑

回复 1# Shell_HAT


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


万事开头难。如果没有一定的基础,开始接触正则时,你会感觉有相当的难度,甚至无所
适从。但,和其它未知事物一样,一旦你开始把玩它、靠近它、了解它,你也会觉得并没
有想象的那么难。

没有捷径,练习是最好的学习方法。至于正则学习工具, 鼎鼎大名的 grep 命令是学习正
则的最好工具,没有之一。

首先,设置好 shell 学习环境,让 grep 的输出显示正则表达式所匹配的字符串,你可以
这样设置:
  1. GREP_OPTIONS='--color=auto'
  2. export GREP_OPTIONS

  3. GREP_COLOR="1;32;41"
  4. export GREP_COLOR
复制代码
  1. $ grep 'gular' urfile
复制代码
的输出如下:

Regular Expression


红色部分就是正则"gular"匹配的字符串。

通过 grep 观察不同的正则表达式所匹配的字符串的差异,你会慢慢理解正则表达式,体
验正则的乐趣。

好的开头是成功的一半。一旦入门了,相信后面的学习会轻松有趣得多。

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


有各种正则,但大同小异,基本是一样的。

首先,要了解正则的两个大类:BRE, Basic Regular Expression 基本正则表达式, 和
ERE, Extended Regular Expression 扩展正则表达式。

在 BRE 中 () + ? 等是字面字符,\( \) \+ \? 才是正则元字符,具有特殊含义。而在
ERE 中 () + ? 等就是元字符,具有特殊含义。

grep 默认的就是 BRE, egrep (grep -E, 中的 e 就是 extended) 就是 ERE。比如:

urfile 的内容:
  1. Regular Expression
  2. foo+
复制代码
  1. $ grep '[a-z]+' urfile
复制代码
BRE, 输出为:
foo+
  1. $ grep '[a-z]\+' urfile
复制代码
BRE, 输出为:

Regular Expression
foo+
  1. $ grep -E '[a-z]\+' urfile
复制代码
ERE, 输出为:
foo+


与 grep '[a-z]+' urfile 的输出相同。
  1. $ grep -E '[a-z]+' urfile
复制代码
ERE, 输出为:
Regular Expression
foo+

与 grep '[a-z]\+' urfile 的输出相同。

其次,要了解不同实现(工具,语言,或者正则引擎)下正则的不同。必要时参考相关资料。

3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这
些工具有哪些优势?


唯一推荐就是 grep 命令。简单,方便,还符合 UNIX 风格

GUI 工具不推荐,觉得不适合学习。

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

遇到问题时,不妨试着用正则解决,相比之下,正则方法是否更快捷简单?

也不是什么场景都适合正则。随便经验的丰富,相信会作出正确的选择。

评分

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

查看全部评分

论坛徽章:
40
水瓶座
日期:2013-08-15 11:26:422015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之乌兹别克斯坦
日期:2015-03-27 14:01:172015年亚洲杯之约旦
日期:2015-03-31 15:06:442015亚冠之首尔
日期:2015-06-16 23:24:37IT运维版块每日发帖之星
日期:2015-07-01 22:20:002015亚冠之德黑兰石油
日期:2015-07-08 09:32:07IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-08-29 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00IT运维版块每日发帖之星
日期:2015-10-11 06:20:00IT运维版块每日发帖之星
日期:2015-11-10 06:20:00
24 [报告]
发表于 2015-03-10 17:56 |只看该作者
嗯 Regular Express 这个靠谱 什么语言都能用的到 ~

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
25 [报告]
发表于 2015-03-10 18:08 |只看该作者
1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。
  还是要学以致用,没有实践出不来效果。经常把论坛的问题当作自己的问题来解决,又帮了人又练了手很合算。
  当初自己为啥接触到了正则也给忘记了,好像是看了同事处理一个问题用了正则感觉非常的牛B,干净利落,于是就去学了。经常遇到的问题就是匹配不到结果,或者不是预期的……于是通过第三点所说的工具来调试和解决。

2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
  导师经常说一句话:“无他,唯手熟而”。这么多不同的工具的异同要死记硬背真是感觉吃力不讨好,个人的方法先浏览教程说明,大体知道每一个工具的正则的使用方法,然后就是多用,用到的时候发现不合预期就换一个格式写以及参考手册文档什么的。用多了就熟了,就像打五笔,背字根会了也打不出字来或者说慢的和蜗牛一样,实际上还是多打打字就自然而然的形成手指记忆了,不用经过大脑就可以打字了。
  
3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
  一直用 grep 的 --color 选项来高亮显示匹配项,这样知道写出来的正则到底匹配了哪一个。其它工具有试用过一个GUI的,还有见过网页版的,不过都只是试用后就丢了,也是个人习惯命令行嘛,其实各人有各人的习惯爱好,也许GUI的更亲民呢。
  
4、看过几本正则表达式的书籍之后,如何在实际工作中学以致用、融会贯通?
  正则不是万能的,所以在实际工作中还是要先分析问题,看看是不是确实可以用正则来处理,一些比较常见的功能或特例的问题都会有专门的工具或命令来处理或者说语言都会有很多的字符串处理函数,它们比较专业高效也比较简单易用,如果没有现成的工具或命令或函数,再考虑用上正则啦。
  实际工作也许用的不多,那就上论坛找别人的问题来练手喽,同时也得个热于助人的好名声~

评分

参与人数 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
26 [报告]
发表于 2015-03-10 18:32 |只看该作者
sed 适合用 grep
sed -r适合用egrep 是不?回复 11# 我是一隻羊


   

求职 : 机器学习
论坛徽章:
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
27 [报告]
发表于 2015-03-10 18:38 |只看该作者
本帖最后由 zsszss0000 于 2015-03-11 09:21 编辑

黑哥,经你这么一说,明白了
对于+这个符号而言。
sed 是BRE
sed -i是ERE


经帽子哥提醒,改为
黑哥,经你这么一说,明白了
对于+这个符号而言。
sed 是BRE
sed -r是ERE
blackold 发表于 2015-03-10 17:28
回复 1# Shell_HAT

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
28 [报告]
发表于 2015-03-10 21:08 |只看该作者
zsszss0000 发表于 2015-03-10 18:38
黑哥,经你这么一说,明白了
sed 是BRE
sed -i是ERE

你这个结论恐怕不对吧,动手验证过吗?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
29 [报告]
发表于 2015-03-10 21:10 |只看该作者
回复 25# seesea2517


经常把论坛的问题当作自己的问题来解决,又帮了人又练了手很合算。

赞同。一直以来我也有这同样的想法。
今天在论坛上看到有人提了个问题,明天自己就可能在工作中遇到同样的问题。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
30 [报告]
发表于 2015-03-10 22:08 |只看该作者
回复 22# 试一试


    5楼提供了好几个工具,有兴趣的话可以玩一玩
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP