断言

当然可以!以下是一个简洁实用的「正则表达式断言速查表」,专为命令行(如 grep -P)、Python、Perl 等支持正则断言的场景准备的。


正则断言概览(Lookahead / Lookbehind)

类型语法含义说明示例
正向前瞻断言 (?=...) 匹配后面必须跟着 ... 的位置 foo(?=bar) 匹配 foobarfoo
负向前瞻断言 (?!...) 匹配后面不能跟着 ... 的位置 foo(?!bar) 匹配 foobazfoo
正向后顾断言 (?<=...) 匹配前面必须... 的位置 (?<=foo)bar 匹配 foobarbar
负向后顾断言 (?<!...) 匹配前面不能... 的位置 (?<!foo)bar 匹配 bazbarbar

📌 断言不是匹配字符,而是匹配“位置”

比如:

echo "abc123" | grep -P '\d(?=3)'

输出:

3

解释:

  • \d(?=3) 匹配一个数字,这个数字后面必须是 3

  • 所以这里只匹配 3 前面的那个 3


🧠 使用建议

  • 筛选包含某模式(如含.):

    grep -P '(?=.*\.).*'
    
  • 匹配前缀是 foo 的字符串

    grep -P '^(?=foo).*'
    
  • 排除某后缀(如不是 .log 结尾):

    grep -P '^(?!.*\.log$).*'
    

🧪 测试样本(推荐用来练习):

echo -e "a.com\nb.log\nc.txt\nnoext" | grep -P '(?=.*\.).*'

输出:

a.com
b.log
c.txt

如果你有具体的过滤需求,我也可以帮你写断言语法 😎
你打算主要在哪些场景用断言?比如文件名、日志内容、IP 地址?

posted on 2025-04-25 19:07  吃草的青蛙  阅读(11)  评论(0)    收藏  举报

导航