S |\BD\b || 正则表达式没有按预期工作

sen*_*ile 0 regex perl

以下一个班轮不能按我的预期工作:

echo "--tags hi -d -e foo=bar" | perl -ne '$_ =~ s|\b-d\b||; print $_'
Run Code Online (Sandbox Code Playgroud)

"-d"仍然存在.看了15分钟后,我觉得我应该得到帮助.

这确实有效:

echo "--tags hi -d -e foo=bar" | perl -ne '$_ =~ s|-d||; print $_'
Run Code Online (Sandbox Code Playgroud)

但当然可能并不总是有效......即我在搜索中需要单词边界标记.

yst*_*sth 6

\b并不意味着在空格之前或之后,它意味着一个单词边界(一个单词字符序列的过渡或出现); 因为-不是一个字符,而\b-手段-有前有一个字字符.

我猜也许你的意思s|(?<!\S)-d(?!\S)||(-d既不是先前也不是非空白字符.

请参阅此处使用的代码