PCRE正则表达式空白

时间:2015-05-13 18:37:57

标签: regex pcre pcregrep

我正在尝试编写一个正则表达式来从/etc/samba/smb.conf中提取所有非评论非空行。评论是:

  1. 以#
  2. 开头
  3. 开头;
  4. 从任意数量的空格开始,紧接着是#或;
  5. 我尝试了以下操作,但它没有正确处理评论类型3。

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

    这个适用于所有3种评论:

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

    你能解释一下为什么将\ s添加到字符类成功过滤掉注释类型3?

2 个答案:

答案 0 :(得分:1)

[^...]表示与...处的任何字符都不匹配。

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

答案 1 :(得分:1)

此处的问题是partial matches,因为您没有使用结束锚$

如果是例3

      ;

;完成\s*部分匹配。在其他正则表达式中,您已禁用\s,因此无法捕获空格并禁用部分匹配。

这里正确的正则表达式是

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

See demo