gpt4 book ai didi

php - 正则表达式 - 匹配 [[[ 和 ]]] 之间任何值的倍数

转载 作者:可可西里 更新时间:2023-11-01 00:48:33 26 4
gpt4 key购买 nike

我需要使用正则表达式匹配 [[[ 和 ]]] 之间的任何内容。然后我需要将在括号之间找到的所有值放入一个数组中。

示例文本:

here is some 'test text [[[media-2 large right]]], [[[image-0 large left]]] the another token [[[image-1]]

从上面的文本我需要匹配前两个:

1, [[[media-2 large right]]]
2, [[[image-0 large left]]]

但不是最后一个,因为它最后只有两个 [。

最佳答案

一个通用的解决方案是这个:

\[{3}(?=.*?\]{3}(?!\]))((?:(?!\]{3}(?!\])).)*)

它是这样写的

\[{3}         # 3 opening square brackets
(?= # begin positive look-ahead ("followed by..."
.*?\]{3} # ...3 closing brackets, anywhere ahead (*see explanation below)
(?!\]) # negative look-ahead: no more ] after the 3rd one
) # end positive look-ahead
( # begin group 1
(?: # begin non-matching group (for atomic grouping)
(?! # begin negative look-ahead ("not followed by"):
\]{3} # ...3 closing square brackets
(?!\]) # negative look-ahead: no more ] after the 3rd one
) # end negative look-ahead
. # the next character is valid, match it
) # end non-matching group
) # end group 1 (will contain the wanted substring)

正向先行是一个保护子句,它允许表达式在长输入字符串中没有 "]]]" 时快速失败。

一旦确定 "]]]" 将在字符串中的某个位置跟在前面,否定先行确保表达式正确匹配字符串像这样:

[[[foo [some text] bar]]]
^
+-------- most of the other solutions would stop at this point

这个表达式检查每个字符后面是否有三个 ],所以在这个例子中它会包括 "bar"

表达式的 "no more ] after the 3rd one" 部分确保匹配不会过早结束,因此在这种情况下:

[[[foo [some text]]]]

匹配仍然是 "foo [some text]"
没有它,表达式会过早停止(“foo bar [some text”)。

副作用是我们不需要实际匹配 "]]]",因为正向预测清楚地表明它们在那里。我们只需要与它们匹配,负前瞻就可以很好地做到这一点。

请注意,如果您的输入包含换行符,则需要以“dotall”模式运行表达式。

另请参阅:http://rubular.com/r/QFo9jHEh9d

关于php - 正则表达式 - 匹配 [[[ 和 ]]] 之间任何值的倍数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com