领宽断言

1290阅读 0评论2013-06-08 心若寒江雪
分类:系统运维

领宽断言(有的地方叫预搜索)可以从对字符串的搜索方向分为两部分来记忆:

表达式
名称
整个字符串的搜索方向
说明
(?=xxx)
先行断言
从右向左
判断字符串的右侧内容是否能满足给出表达式
(?!xxx)
负向先行断言
同上
判断字符串的右侧是否不能满足给出的表达式
(?<=xxx)
后发断言
从左向右
判断字符串的左侧是否满足给出的表达式
(? 负向后发断言
同上
判断字符串的左侧是否不能满足给出的表达式

零宽断言匹配的只是一个位置,取出的信息是这个位置之前或者之后的内容,例如:
root@ubuntu:~# echo "I'm singing while you'are dancing" | grep -oP '\b\w*(?=ing\b)'
sing
danc
在看下面这个例子:
root@ubuntu:~# echo "I'm singing while you'are dancing" | grep -oP '\b\w+ing\b'
singing
dancing
\b\w*(?=ing\b)匹配的是sing和ing中间的位置和danc和ing中间的位置,\b\w+ing\b匹配的是以‘    ing’结尾的整个单词.

root@ubuntu:~# echo "reading a book" | grep -oP '\b[a-z]{3}(?!k\b)'
rea
root@ubuntu:~# echo "reading a book" | grep -oP '(?<=read)\w*'
ing


待续.....

上一篇:POSIX内置Shell变量
下一篇:没有了