正则表达式通过忽略内部标签来匹配结束标签

我想捕获 MediaWiki 格式的图像标签,例如,

[[图片:Justus Sustermans - Galileo Galilei (Uffizi) 的肖像).jpg|left|thumb|upright|[[Galileo]] 通常被称为 [[现代天文学]] 之父,肖像由 [[Justus Sustermans] ] ]]

我必须忽略内部[[...]]以匹配整体(以粗体[[和 显示]])。我想出了

[[Image:((?:[^]]*+(?:(?![[)|(?R))*+)*+)]]

但它停在第一个]]

小提琴

回答

或者您可以寻找平衡的方括号,但使用环视限制两端的规则:

(?=[[Image:)([(?:[^][]|(?1))*])(?<=]])
  • (?=[[Image:) 前瞻搜索以开头的字符串 [[Image:
  • ([(?:[^][]|(?1))*]) 使用递归平衡嵌套方括号
  • (?<=]]) Lookbehind 搜索以结尾的字符串 ]]

查看测试用例


如果您不关心里面的括号是否平衡,但只想做出假设并排除[[ ]]对。这个应该可以解决问题:

[[Image:(?:[[.*?]]|.)*?]]

查看测试用例


以上是正则表达式通过忽略内部标签来匹配结束标签的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>