免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
1 [报告]
发表于 2015-03-11 21:44 |显示全部楼层
本帖最后由 o枫叶o飘零 于 2015-03-11 21:47 编辑

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

先去了解正则表达式的作用,然后再去了解如何用、怎么用、怎么正确用。

我最先接触到正则表达式是因为grep命令,由于需要经常筛选一些文本,当时水平不够,只能筛选些最基础的  (一些简单的字符串的筛选)。后来知道grep里面可以用正则表达式,精

确的去筛选你所想要的文本。因此就去学习了正则表达式。

当时最先看的是正则表达式必知必会PDF版本,但是由于该版本的正确答案没有影印出来,所以当新手不懂正则语法时,只能连蒙带猜(有时不一定猜对)。后来PF师傅把整个PDF重新整理了下,把答案全部圈出来了(并且不差毫厘)。因此读起来方便得多。  新手需要花上1整天的时间去仔细阅读,然后去理解、记住那些表达式的意思、语法结构。
后来无意中看到论坛中有一个正则表达式的数独游戏。   因此打印了一张  花了1周的时间去做(在上家公司就是因为这个事情被老板看到了,结果被炒鱿鱼了大神们不要取笑我)  。       做完了  再去回顾先前看的那个PDF,觉得简单了不少。。

当时最疑惑的地方就是linux里面同一个符号(*  ?  ),为什么匹配的结果会有差异   后来搞清楚了   是这些符号在不同环境下,实现的效果不同  (通配符和正则的区别)

我在该目录下创建了3个文件  1 a1 aa1

  1. [root@rhel7-LT aaa]# ls *
  2. 1  a1  aa1 ax1
  3. [root@rhel7-LT aaa]# ls a*1
  4. a1  aa1  ax1
  5. [root@rhel7-LT aaa]# ls a?1
  6. aa1  ax1
复制代码
注意     a*1 匹配了a1 aa1    a?1只匹配出了aa1   

然后我们使用正则

  1. [root@rhel7-LT aaa]# ls |grep --colour -oP 'a*1'
  2. 1
  3. a1
  4. aa11
  5. [root@rhel7-LT aaa]# ls |grep --colour -oP 'a?1'
  6. 1
  7. a1
  8. a11
复制代码

a*1匹配出了  1  a1 aa1   ax1中的1
a?1匹配出了  1  a1  aa1中的a1   ax1中的1


也许这样看不直观(代码里面不能改色

红色部分就是匹配出的结果

ls |grep --colour -P 'a*1'
1
a1
aa1
ax1

ls |grep --colour -P 'a?1'

1
a1
aa1
ax1




这究竟是什么原因呢?


原来这些使用在不同的地方,会有比较大的差别


在第一个栗子当中  * ?  在路径中会被当作通配符  这里*的意思是匹配任意0个或1个字符
                                                                    而?的意思是匹配任意1个字符

在第二个栗子当中  * ? 则被当作正则表达式的一部分      * 表示前一个子表达式的0次或者多次
                                                                         ? 表示前一个子表达式的0次或者1次




2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
其实正则表达式的语法结构和用法在grep/sed/Shell/Perl 里面都是一样的,只是不同命令,有些细节上的区别(个人认为由于语言开发者不同、因此细节上或多或少有些区别)
初学者先熟悉正则表达式的用法,再去深究其中细微的差别。


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

tool.chinaz.com/regex/   这个网站可以验证我们写的正则表达式是否正确。(我很少用到)

或者有些参数直接会对匹配的结果上色   比如grep --colour

做练习经常逛逛论坛,先自己尝试写写,就算写复杂了也没关系,然后去看大神们写的表达式,看他们精简在哪。。


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

遇到问题首先冷静思考,然后再去想大体上怎么做、先大体上做出出来 然后去验证你的结果,最后再去考虑一些细节、以及优化精简



尾部附上正则数独游戏图 RegularExpressionGrid.pdf (21.15 KB, 下载次数: 26)




评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP