regex - PCRE 正则表达式 空格

标签 regex pcre pcregrep

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

  1. 以#开头
  2. 以 ; 开头
  3. 以任意数量的空格开头,后紧跟 # 或 ;

我尝试了以下操作,但它没有正确处理评论类型 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*[#;]).+$

See demo

关于regex - PCRE 正则表达式 空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30222784/

相关文章:

c++ - std::regex_match与字符éèà

Ruby 正则表达式帮助

正则表达式 (PCRE) : Match all digits conditional upon presence of a string

regex - 狂欢 : regular expressions within backticks

linux - 如何在文件中搜索多行模式?

regex - emacs:使用(字符串匹配)在字符串中查找子字符串

用于解析字符串的 PHP Regex 帮助

php - 正则表达式拆分 TitleCase Word

ios - swift 正则表达式格式?

linux - 查找匹配位于不同行的模式的文件