免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Shell_HAT

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

论坛徽章:
0
发表于 2015-03-11 15:30 |显示全部楼层
应该是星爷的少林足球吧
Buring__ 发表于 2015-03-10 14:51
gif图出自什么电影啊

求职 : 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
发表于 2015-03-11 16:03 |显示全部楼层
SHEL脚本提供了很多图形界面无法提供的优势。目前情况下,我的终端重来就没有关过。有时候SHELL脚本可以让我高效的实现某些小功能。SHELL本身也是很值得研究的。

论坛徽章:
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
发表于 2015-03-11 18:13 |显示全部楼层
感觉正则表达式在大家眼里就是 sed 和 grep 。。。

论坛徽章:
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
发表于 2015-03-11 18:14 |显示全部楼层
感觉好久没看到 SHELL_HAT 了 ,一有Shell的话题就复活了

回复 41# Shell_HAT


   

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
发表于 2015-03-11 19:39 |显示全部楼层
感觉学shell和学正则最好的办法就是逛论坛看帖回帖,看书只能学语法,想灵活应用就得靠众人的经验与智慧了。

论坛徽章:
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
发表于 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 感谢分享

查看全部评分

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
发表于 2015-03-12 11:29 |显示全部楼层
俺也挤挤 挤不进去 不要紧 加字

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2015-03-12 12:32 |显示全部楼层
1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。

先找本入门书籍学习一下,大概掌握一下正则表达式的内容,不需要全不都会,遇到不懂的就1是网上搜一下,2是到论坛发帖子问问,一般都会找到答案;

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

自己做好记录,都有什末区别和共识的地方;主要还是多练,多用,熟能生巧;


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

http://www.regexbuddy.com/        这个网站挺好,推荐一下;


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

在工作中多使用,多练习,到论坛看看别人提问,知道到的问题帮忙回复一下,对自己也是一种提高;

评分

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

查看全部评分

论坛徽章:
0
发表于 2015-03-12 20:44 |显示全部楼层
回复 1# Shell_HAT

1.   。。。。什么都是快,3天学会正则。。。
    学:  找个例子试下,提高点兴趣,然后找经典的书来读,细读。。。
    困难:急躁,想3天学会并粗通之。。。
    解决:各种看目录,跳读,一章一章啃(碰见长的,跳过,完了再啃)
       跌跌撞撞读完一遍,原来不过如此,再细读一遍(不跳了)。

2.  I母鸡啊。。
    慢慢来,,,,修禅去吧。

3. 学的啥语言,就用啥吧,,要不然你还需要再去学工具,增加负担。。。

4. 。。。用的很少,,忘了再学,学了再忘。。。你就融会贯通了

5. 我是免费得书的,打字不容易啊,,,而且是不熟悉的输入法。


   

评分

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

查看全部评分

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
发表于 2015-03-12 22:28 |显示全部楼层
学习中。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2021中国数据库技术大会

【数造未来】2021年10月18日-20日第十二届中国数据库技术大会
ITPUB、大会的会员您们好: 因目前国内疫情严峻,为响应北京市最新疫情防控要求,保障参会人员的健康和安全,组委会经协商决定:DTCC2021第十二届中国数据库技术大会延期至10月18日-20日(周一~周三)在北京国际会议中心举行,由此给各位带来的不便,敬请谅解!

大会官网
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP