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

3

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

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

这个不匹配任何字符。

3个回答

6
你可以像这样使用它:
echo 'some text (some text in paranthesis) [some other in brackets]' | grep -o '[][()]'

(
)
[
]

在字符类内部,您无需转义()。此外,如果您将][放置在打开的[之后,那么您也不需要转义它们。


1
Anubhava:每天回答9.6个问题,持续5年半。我也想在AOL找到一份工作! - Scott Weaver
哈哈,当然,加入吧。 - anubhava
[][()] 是一个括号表达式,而不是字符类。[:space:] 是一个字符类,因此可以作为 [[:space:]] 包含在括号表达式中。 - Ed Morton

3

仅供参考:

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

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

‘]’
如果不是第一个列表项,则结束括号表达式。因此,如果您想将‘]’字符作为列表项,请将其放在首位。

另外,您可以看到在括号表达式中,([)没有特殊含义。

由于您的'[\[\]\(\)]' 括号表达式模式中的]不是第一个字符,它会结束该模式,而下一个]则创建了一个不完整的括号表达式。


0

最常见的方法是在字符前面加上 \,但奇怪的是,在使用 grep 时似乎不起作用。

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

% cat yourfile.txt | perl -ne 'print if(/[\[\]\(\)]/);';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接