【问题标题】:What does "[[]]" mean in regex?正则表达式中的“[[]]”是什么意思?
【发布时间】:2012-09-07 08:38:37
【问题描述】:

[[]] 在正则表达式中是什么意思?

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

嗯,它似乎与[] 匹配。 (字符序列[],而不是[]。) (我已经用 python 的 re 模块对其进行了测试,结果相同。) 真的吗? 如果有,为什么?

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

【问题讨论】:

  • 看来我看错了你的问题。
  • @BoltClock 我稍微编辑了我的问题。 (指出[]是一个序列)我希望现在看起来更清楚了。)

标签: regex grep pcre


【解决方案1】:

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

  • [[] 是仅匹配 [ 字符的字符类。 [ 只能在字符类的开头使用。
  • ] 在字符类之外只是一个普通字符。

两者是连接的,因此您的表达式匹配[ 后跟] 的任何字符,从而匹配[]

【讨论】:

  • 如果你想尝试更多类似的东西,试试[[]x][[]这样的表达式:)
  • 在 JAVA 中,"foo [ bar".matches("[[]]"); 抛出 PatternSyntaxException索引 3 附近的未封闭字符类,因为您需要转义内括号:"[\\[\\]]"
  • @sp00m 感谢您指出这一点。在某些语言中,[[] 是非法的。
猜你喜欢
  • 2011-06-15
  • 2012-06-10
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2020-01-11
  • 2021-04-05
相关资源
最近更新 更多