正则表达式 - 字符类中的方括号和括号

问题描述 投票:0回答:3

我想在正则表达式的字符类中匹配这些字符:[ ] ( ),我该怎么做?

echo 'some text (some text in parenthesis) [some other in brackets]' | grep '[\[\]\(\)]'

这个与任何字符都不匹配。

regex grep special-characters
3个回答
6
投票

你可以这样使用它:

echo 'some text (some text in paranthesis) [some other in brackets]' |
grep -o '[][()]'

(
)
[
]

请注意:

  • 如果
    ]
    [
    放置在方括号表达式中打开
    [
    之后,那么它们将被视为文字
    ]
    [
  • 这可能是可选的
    ^
    ,位于第一个位置,用于在
    ]
    [
  • 之前进行否定
  • 您不需要在括号表达式内转义
    (
    )

3
投票

仅供参考:

根据

grep
文档,第3.2字符类和括号表达式节:

大多数元字符在括号表达式中失去了其特殊含义。

‘]’

如果它不是第一个列表项,则结束括号表达式。所以,如果你想让‘]’字符成为列表项,你必须把它放在第一位。

此外,您还可以看到

(
[
)
在括号表达式中并不特殊。

由于

]
括号表达式
模式中的 '[\[\]\(\)]' 不是第一个字符,因此它结束模式,下一个
]
创建了一个不完整的括号表达式。


0
投票

最常见的方法是在字符前放置 \,但奇怪的是,这似乎不适用于 grep 中的 ]。

如果您可以使用 Perl,请执行以下操作:

% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';
© www.soinside.com 2019 - 2024. All rights reserved.