贪婪的RegEx

qoefvg9y  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(98)

我的字符串如下

[[FOOTNOTE 23]] + [[FOOTNOTE 1787] +  182 - x +[[XYZ123]] + [[CD78G]]

我的目标是捕获所有以双括号开始和结束的关键字。请注意,[[FOOTNOTE 1787]仅以一个方括号结束,因此不应匹配
我的RegEx模式看起来像这样:

\[\[\w{5,}.*?\]\]?

这似乎是工作,除了它也匹配[[FOOTNOTE 123],它不应该。
我意识到结尾的?意味着char是可选的。
我想做的是
1.使最后一个字符必需(双括号),
1.但是以非贪婪的方式使整个模式匹配。
谢谢

pftdvrlh

pftdvrlh1#

你们差点就成功了。您需要的是[^[\]]*(0个或多个不是方括号的字符):

\[\[\w{5,}[^[\]]*\]\]

试试on regex101.com
这个正则表达式匹配:

**[[FOOTNOTE 23]]** + [[FOOTNOTE 1787] +  182 - x +**[[XYZ123]]** + **[[CD78G]]**
f4t66c6m

f4t66c6m2#

  • ".我的目标是捕获所有以双括号开头和结尾的关键字。请注意,[[FOOTNOTE 1787]仅以一个括号结尾,因此不应匹配."*

您可以Assert方括号中的关键字不是]

\[\[[^]]+?]]

这个会吻合

ztmd8pv5

ztmd8pv53#

如果两个闭括号之间可以有一个闭方括号:

\[\[\w{5}(?:(?!\]\]|\[\[).)*\]\]

模式匹配:

  • \[\[匹配[[
  • \w{5}匹配5个单词字符
  • (?:非捕获组作为整体部分重复
  • (?!\]\]|\[\[).Assert从当前位置向右没有[[]],如果为真,则使用点匹配单个字符
  • )*关闭非捕获组,并选择重复该操作
  • \]\]匹配]]

Regex demo

相关问题