如何将 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 组 ]
中的捕获
)
关闭分支重置组
假设我有以下文本:
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 组]
中的捕获
)
关闭分支重置组