PCRE 正则表达式空格

PCRE regex whitespace

我正在尝试编写一个正则表达式以从 /etc/samba/smb.conf。评论是这样的行:

  1. 从#开始
  2. 从 ; 开始
  3. 以任意数量的空格开头,紧接着是 # 或 ;

我尝试了以下方法,但它没有正确处理评论类型 3。

grep -P '^\s*[^#;]' /etc/samba/smb.conf

这一项适用于所有 3 种类型的评论:

grep -P '^\s*[^#;\s]' /etc/samba/smb.conf

你能解释一下为什么在字符class后面加上\s能成功过滤掉评论类型3吗?

[^...] 表示不匹配 ....

处给出的任何字符

您需要:^\s*[#;].

这里的问题是 partial matches 因为您没有使用结束锚点 $

对于示例 3

      ;

将由 \s* 完成部分匹配 ;。在另一个正则表达式中,您已禁用 \s,因此它不会捕获 space 和部分匹配已禁用。

这里正确的正则表达式是

 (?m)^(?!\s*[#;]).+$

See demo