如何将 space 之间可变数量的括号捕获为一个组?

How to capture brackets with variable in-between amount of space as a single group?

假设我有以下文本:

Yes: [x]
Yes: [  x]
Yes: [x  ]
Yes: [  x  ]
No: [
No: ]

我有兴趣捕获 angular 方括号 [] 包含一个 x 的两侧有可变数量的水平 space x。我苦苦挣扎的一点是,两个 angular 括号必须被捕获到具有相同 ID(即 </code>)</strong>.[ 的组中。 =28=] <p>我开始使用以下 <code>regex:

的积极前瞻和后视断言的组合
\[(?=\h*x)|(?<=x)\h*\K\]

这会产生以下匹配项(即,为了清楚起见,请参阅 demo 并启用 extended 标志:

然后,我尝试在整个表达式周围放置一个捕获组,但匹配在正后视 (?<=x)\h* 之后延伸到水平 space,如下所示(即,另见 demo).

我正在使用 Oniguruma regular expressions and the PCRE 口味。您是否有任何想法以及如何做到这一点?

您可以使用 branch reset group:

(?|(\[)(?=\h*x\h*])|(?<=\[)\h*x\h*(]))
  • (?|分支重置组
    • (\[)(?=\h*x\h*]) 在第 1 组中捕获 [,在右侧的可选水平空白字符之间断言 x,然后是 ]
    • |
    • (?<=\[)\h*x\h*(]) 向左断言 [,然后匹配 x 可选水平空白和第 2 组 ] 中的捕获
  • )关闭分支重置组

Regex demo