PCRE 正则表达式空格
PCRE regex whitespace
我正在尝试编写一个正则表达式以从 /etc/samba/smb.conf。评论是这样的行:
- 从#开始
- 从 ; 开始
- 以任意数量的空格开头,紧接着是 # 或 ;
我尝试了以下方法,但它没有正确处理评论类型 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*[#;]).+$
我正在尝试编写一个正则表达式以从 /etc/samba/smb.conf。评论是这样的行:
- 从#开始
- 从 ; 开始
- 以任意数量的空格开头,紧接着是 # 或 ;
我尝试了以下方法,但它没有正确处理评论类型 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*[#;]).+$