从范围中排除转义字符

时间:2016-11-28 12:52:32

标签: regex

我需要在括号之间提取一个表达式,它可以包含所有内容,但不包括非转义的闭括号。

例如,来自[aaa\]bbbbbb]的正则表达式应该给出结果:aaa\]bbbbbb

我试过这个:\[([^(?<!\\)\]]*)\]但是失败了。

任何提示?

2 个答案:

答案 0 :(得分:1)

您可以使用

\[([^\]\[\\]*(?:\\.[^\]\[\\]*)*)]

或者 - 如果在非转义的[[之间可能存在任何未转义的](例如[a[\[aa\]bbbbbba\[aabbbbbb]),请取出{{1 }}:

\[

请参阅regex demo 1regex demo 2。它是unrolled variant正则表达式的\[((?:[^][\\]|\\.)*)]

<强>详情:

  • \[([^\]\\]*(?:\\.[^\]\\]*)*)] - \[
  • [ - 第1组捕获:
    • ([^\]\[\\]*(?:\\.[^\]\[\\]*)*) - 除了[^\]\[\\]*[]之外的零个或多个字符(在一些正则表达式中,您可以编写它而不会逃脱 - \
    • [^][\\]* - 零个或多个序列:
      • (?:\\.[^\]\[\\]*)* - 任何转义序列(\\.以及换行符以外的任何字符
      • \ - 除[^\]\[\\]*[]
      • 以外的零个或多个字符
  • \ - 结束]

答案 1 :(得分:0)

这是(我认为)最简单的正则表达式:

\[(.*?)(?<!\\)\]

将方括号内的文本捕获为第1组。

请参阅live demo