我正在尝试编写一个正则表达式来从/etc/samba/smb.conf 中提取所有非注释和非空行。评论是这样的行:
- 以#开头
- 以 ; 开头
- 以任意数量的空格开头,后紧跟 # 或 ;
我尝试了以下操作,但它没有正确处理评论类型 3。
grep -P '^\s*[^#;]' /etc/samba/smb.conf
这适用于所有 3 种类型的评论:
grep -P '^\s*[^#;\s]' /etc/samba/smb.conf
你能解释一下为什么在字符类中添加\s成功过滤掉了评论类型3吗?
最佳答案
这里的问题是partial matches因为您还没有使用结束 anchor $
。
以示例 3 为例
;
将由 \s*
完成 ;
的部分匹配。在另一个正则表达式中,您已禁用 \s
所以它不会捕获空间并禁用部分匹配。
这里正确的正则表达式是
(?m)^(?!\s*[#;]).+$
关于regex - PCRE 正则表达式 空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30222784/