gpt4 book ai didi

.net - 正则表达式否定前瞻以匹配 Markdown 链接

转载 作者:行者123 更新时间:2023-12-04 21:05:37 25 4
gpt4 key购买 nike

我们被一个正则表达式问题困住了。

这是问题所在。考虑以下两种模式:

1) [hello] [world]
2) [hello [world]]
我们需要编写一个只能匹配 [world] 的正则表达式在第一个和整个模式( [hello [world]] )在第二个。

通过使用负前瞻,我编写了以下正则表达式来解决部分问题:

\[[^\[\]]+\](?!.*\[[^\[\]]+\])

这个正则表达式与我们想要的模式 1) 匹配,但不适用于模式 2)。

最佳答案

在 .NET regex 中,您可以使用平衡组来匹配嵌套的平衡括号。所以,要匹配最后一个 [...]一行上的子字符串(带有嵌套括号),您需要一个很长的模式,例如

\[(?:[^][]+|(?<c>)\[|(?<-c>)])*(?(c)(?!))](?!.*\[(?:[^][]+|(?<d>)\[|(?<-d>)])*(?(d)(?!))])

regex demo at RegexStorm.net .

详情
  • \[(?:[^][]+|(?<c>)\[|(?<-c>)])*(?(c)(?!))] - [...]带有嵌套括号的子字符串:
  • \[ - [字符
  • (?:[^][]+|(?<c>)\[|(?<-c>)])* - 零次或多次出现:
  • [^][]+| - 除 ] 之外的 1 个或多个字符和 [
  • (?<c>)\[| - 空值添加到组“c”和一个 [匹配
  • (?<-c>)] - 从“c”组堆栈和 ] 中减去空值匹配
  • (?(c)(?!)) - 如果组“c”堆栈不为空,则匹配失败的条件
  • ] - ]字符
  • (?!.*\[(?:[^][]+|(?<d>)\[|(?<-d>)])*(?(d)(?!))]) - 除了换行符之外,没有跟任何 0+ 字符,跟上面的模式一样。
  • 关于.net - 正则表达式否定前瞻以匹配 Markdown 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849681/

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