免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5381 | 回复: 14
打印 上一主题 下一主题

《精通正则表达式》笔记 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-22 01:37 |只看该作者 |倒序浏览
我只看了前面两三章 ,所以,只简单的记下以前从来没见过的东西
这书的核心是4、5、6章……

1. 多选结构
(mm|gg) 表示匹配 "mm"或"gg"

2. 忽略大小写
s/source/dest/i
搜索source,将其替换为dest,此处的i只对source起作用,而不会作用于dest。

3. 单词分界符
\< 用来匹配单词的开始
\> 用来匹配单词的结束
比如: \<cat 表示匹配以"cat"开头的单词,如cate
cat\>匹配以"cat"结尾的单词,如scat
则:\<cat\> 必须精确匹配 "cat"

4. 捕获括号及"反向引用"
在有些支持"反向引用"的地方,括号可以用来表示记忆,这种括号称为捕获括号,在后面,可以通过\1、\2、\3等来引用括号内匹配的表达式。(或用$1、$2等引用)
如:m/\<([A-Za-z]+)\s\1\>/g
表示搜索两个相邻的,重复的单词。
\s表示任意多个空白字符。
\1就表示前面 ([A-Za-z]+)匹配到的内容。 所以,这个表达式的意思就是在开始找到一个单词,然后再判断它后面的那个单词,是否是一样的。
注意,如果用 (?:...)括号的话,它就不会起捕获作用了,它只起分组的作用。

5. 字符组
字符组是放在[]中的部分。
它类似于宿主语言中的一个子语言,它里面定义的元字符与宿主语言的很不相同。
[^...] 排除型字符组

6. 一些转义字符
\s 可以匹配任何“空白”字符,包括空格、tab、进纸符等。
\S 与\s相反,除\s之外的。(注意,它必要要匹配“字符”!如果不能匹配空)
\d [0-9],即数字。
\D 除\d之外的。
\w [a-zA-Z0-9],即匹配一个包含数字、字母的单词。
\W 除\w之外的。
\b 可以匹配单词起始 或 单词结束。

7. 环视功能
环视是用来在字符串不匹配任何字符,只匹配文本中的位置,注意,只是位置。
顺序环视:从左至右查看文本,尝试匹配子表达式,如果能够匹配,就返回匹配成功信息。
1) 肯定顺序环视:(?=...)
如:
文本信息为:my test string.
表达式: s/(?=test)/first /i
它就能匹配到test左边的位置!
然后用first 来替换这个位置,因为它只是一个位置,所以实际上就是插入。(实际上就像: s/^/yeah/g 中的^,在每行的开头插入"yeah"
最后经过处理的文本信息为:
my first test string.

2) 否定顺序环视:(?!...)
子表达式不能匹配右侧文本。
如:(?!\d),就表示该位置的右边不是数字的时候,就匹配成功。

3) 肯定逆序环视:(?<=...)
子表达式能够匹配左侧文本。
如:(?<=\d\d\d),就表示,在该位置的左边,必须是3个数字时才会匹配成功。
如:test321ff,如果用上面的表达式来匹配,最终匹配的位置是1的后面,f的前面。

4) 否定逆序环视:(?<!...)
子表达式不能匹配左侧文本。

8. 条件判断
结构:(?if then |else)
如:(god)?(?(1)pig|ciahi)
这个表达式就能产生这样的效果:
如果"god"参与了匹配,在它之后继续尝试匹配pig,如果god没有参与匹配,就会尝试匹配ciahi。
比如文本是: "godpi is not ciahi", 存在123.txt中。
在perl中使用如下命令:
perl -p -e "s/(god)?(?(1)pig|ciahi)/haha/g" 123.txt
就会输出:godpi is not haha
再如:(?(?<=NUM\d+|\w+)
如果出现了"NUM:",就会在它后面尝试匹配\d+,即一些数字。
如果没有出现"NUM:",就只匹配\w+,即普通单词。

9. 忽略优先量词 *?、+?、??
普通的量词*、+、?在匹配的时候,会匹配尽可能多的字符。
如:文本为:who is No. 5555?
则表达式 5+ 会将4个5全都匹配。
而忽略优先量词,匹配的时候只匹配尽可能少的字符。
表达式 5+? 只会匹配1个5.

论坛徽章:
0
2 [报告]
发表于 2009-08-22 08:46 |只看该作者
经典!

更多参考:





论坛徽章:
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
3 [报告]
发表于 2009-08-22 08:49 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-08-22 09:56 |只看该作者
原帖由 unixlinuxsys 于 2009-8-22 08:46 发表
经典!

更多参考:







shell脚本学习ing

论坛徽章:
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
5 [报告]
发表于 2009-08-22 11:15 |只看该作者
《正则表达式》的封面上有两个黑哥

论坛徽章:
0
6 [报告]
发表于 2009-08-22 13:00 |只看该作者

回复 #5 Shell_HAT 的帖子

怪不得黑哥厉害,原来他等于半本《精通正则表达式》,而且是还大的那一半

论坛徽章:
0
7 [报告]
发表于 2009-08-23 10:54 |只看该作者
原帖由 haimming 于 09-8-22 13:00 发表
怪不得黑哥厉害,原来他等于半本《精通正则表达式》,而且是还大的那一半



原来如此啊

论坛徽章:
0
8 [报告]
发表于 2009-08-24 15:08 |只看该作者
我要把头像换成黑海龟

论坛徽章:
0
9 [报告]
发表于 2009-08-24 18:42 |只看该作者
在我看来《精通正则表达式》这本书的第四章和第六章比较值得看

论坛徽章:
0
10 [报告]
发表于 2009-08-25 12:33 |只看该作者
ORELLY的书
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP