表达式 |
名称 |
整个字符串的搜索方向 |
说明 |
(?=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
待续.....