Php regex通过忽略内部标记来匹配结束标记
我想捕获MediaWiki格式的图像标签,例如 [[图片:贾斯特斯·萨斯特曼-伽利略·伽利略的肖像 (Uffizi).jpg | left | thumb | right |[[Galileo]]通常被称为 [[现代天文学]]之父,[[贾斯特斯]的肖像 苏斯特曼人]]] 我必须忽略内部的Php regex通过忽略内部标记来匹配结束标记,php,regex,preg-match,Php,Regex,Preg Match,我想捕获MediaWiki格式的图像标签,例如 [[图片:贾斯特斯·萨斯特曼-伽利略·伽利略的肖像 (Uffizi).jpg | left | thumb | right |[[Galileo]]通常被称为 [[现代天文学]]之父,[[贾斯特斯]的肖像 苏斯特曼人]]] 我必须忽略内部的[[…]]以匹配整体(以粗体[[[/code>和]]显示)。我想出了 \[\[Image:((?:[^]]*+(?:(?!\[\[)|(?R))*+)*+)\]\] 但它在第一个]处停止 您可以使用 \[\[图
[[…]]
以匹配整体(以粗体[[[/code>和]]
显示)。我想出了
\[\[Image:((?:[^]]*+(?:(?!\[\[)|(?R))*+)*+)\]\]
但它在第一个]
处停止
您可以使用
\[\[图像:(((?:[^][++\124;)(\[\[(?:[^][++\ 124;(?-1))*]]))*)]]
看
详情:
\[\[Image:
-文本[[Image:
字符串
((?:[^][]+|)(\[\[(?:[^][]++|(?-1))*]))*))*)
-第一组:
(?:[^][]|(\[\[(?:[^][]+++(?-1))*]))*
-零次或多次出现
[^][]+
-除[
和]
以外的任何一个或多个字符
|
-或
(\[\[(?:[^][+++[124;(?-1))*])
-第2组(技术,用于递归):嵌套的[[
和]
之间的子字符串
]
-一个]
字符串
注意:如果确定只有一个嵌套级别的双方括号,则可以使用
\[\[图像:([^][]*(?:\[\[^][]*]][^][]*)*)]]
看。在这里,([^][]*(?:\[\[^][]*][^][]]*][^]][]*])
将除[
和]
之外的任何零个或多个字符捕获到组1中,然后在双方括号之间匹配零个或多个出现的子字符串(内部没有方括号),然后匹配除[
和]之外的零个或多个字符
您可以使用
\[\[图像:(((?:[^][++\124;)(\[\[(?:[^][++\ 124;(?-1))*]]))*)]]
看
详情:
\[\[Image:
-文本[[Image:
字符串
((?:[^][]+|)(\[\[(?:[^][]++|(?-1))*]))*))*)
-第一组:
(?:[^][]|(\[\[(?:[^][]+++(?-1))*]))*
-零次或多次出现
[^][]+
-除[
和]
以外的任何一个或多个字符
|
-或
(\[\[(?:[^][+++[124;(?-1))*])
-第2组(技术,用于递归):嵌套的[[
和]
之间的子字符串
]
-一个]
字符串
注意:如果确定只有一个嵌套级别的双方括号,则可以使用
\[\[图像:([^][]*(?:\[\[^][]*]][^][]*)*)]]
看。在这里,([^][]*(?:\[\[^][]*][^][]]*][^]][]*])
将除[
和]
之外的任何零个或多个字符捕获到组1中,然后在双方括号之间匹配零个或多个出现的子字符串(内部没有方括号),然后匹配除[
和]之外的零个或多个字符
或者您可以查找平衡方括号,但使用查找框限制两端的规则:
(?=\[\[Image:)(\[(?:[^][]|(?1))*])(?<=]])
请参见,或者您可以查找平衡方括号,但使用查找框限制两端的规则:
(?=\[\[Image:)(\[(?:[^][]|(?1))*])(?<=]])
查看与上面引用的全部文本相匹配的@anubhava(维基文本之外)。因此,您不需要实际捕获[[Image:
和]
之间的文本?那么为什么要使用捕获组?@anubhava匹配上面引用的全部文本(wiki文本之外)。因此,您不需要实际捕获[[Image:
和]]
之间的文本?那你为什么要用一个抓捕小组?