2012-09-14 49 views
4

[[]]在正则表达式中的含义是什么?“[[]]”在正则表达式中的含义是什么?

$ echo '[][]' | grep -oE '[[]]' 
[] 
[] 
$ grep --version 
grep (GNU grep) 2.10 

嗯,它看起来它匹配[]。 (字符序列[],而不是[]。) (我用python的re模块测试过,结果相同。) 真的吗? 如果是这样,为什么?

我知道如果我想匹配[],我应该写[][][[\]]。 (他们在PCRE中工作,grep支持[][],但不是[[\]],因为\在grep的括号表达式中失去了特殊含义。) 我只是感觉好奇。

+0

看起来我误解了你的问题。 – BoltClock

+0

@BoltClock我已经编辑了一下我的问题。 (指出'[]'是一个序列)我希望现在看起来更清楚。) – weakish

回答

4

表达式[[]]实际上由两个级联的子表达式组成:[[]]

  • [[]是只匹配[个字符的字符类。有[只能在角色类的开头。
  • ]只是在字符类以外的普通字符。

两者被连接起来从而您的表达式匹配接着][任何字符,这导致匹配[]

+0

如果你想尝试更多类似的东西,试试像'[[] x'或'] [[]''这样的表达式: ) – Michael

+0

在JAVA中,''foo [bar“.matches(”[[]]“);'抛出'PatternSyntaxException':*未绑定的字符类在索引3 *附近,因为您需要转义内部括号:''[[ \\ [\\]]“'。 – sp00m

+0

@ sp00m感谢您指出这一点。在某些语言中,'[[]'只是非法的。 – weakish

相关问题