gpt4 book ai didi

regex - 正则表达式匹配 {asdf} 但不匹配 {{asdf}}

转载 作者:行者123 更新时间:2023-12-04 17:52:37 24 4
gpt4 key购买 nike

我有一个非常简单的问题。

我使用这个正则表达式来匹配 {somestring} 的实例.

\{{1}(\w+?)\}{1}

问题是我需要它来忽略 {{somestring}} 的实例,但当然,它匹配内部 {somestring}{{somestring}} .

知道如何调整表达式以跳过类似 {{somestring}} 的任何内容吗? ?

我正在使用 vbscript 的正则表达式引擎。

最佳答案

如果您的正则表达式引擎支持 lookarounds ,他们是要走的路:

(?<!\{)\{\w+\}(?!\})

这确实是你想要的。后视断言没有 {在您之前 { ,并且前瞻断言不存在 }关注您的 } .

请注意 {1}从不做任何事情。曾经。

另请注意,您不需要制作 \w+不贪婪,因为它不能消费 }反正。

最后,我只想把它放在这里,这是逃避 { 的替代方法和 }就是把它放到一个字符的字符类中。这是您喜欢哪种口味的问题,但我更喜欢这个的可读性:
(?<![{])[{]\w+[}](?![}])

编辑:

It seems like VBScript does not support lookbehinds.

这有点问题。你能得到的最接近的是:
(^|[^{])[{]\w+[}](?![}])

但是,如果在字符串的开头找不到匹配项,这将包括匹配项中的前一个字符。这本身不是问题,因为您可以通过捕获子字符串函数或其他东西来摆脱该字符。但是,匹配项不能重叠,因此如果您有类似 {some}{string} 的输入您不会轻易获得两场比赛(因为第一场 } 必须是第二场比赛的一部分)。部分引擎提供 \G相当于 ^用于继续匹配,但 VBScript 似乎也不支持。因此,从这里开始它会变得丑陋。

您可以做的是排除关闭 }从比赛中(使用另一个前瞻):
(^|[^{])[{]\w+(?=[}](?![}]))

现在您将获得匹配项 {some}{string ,因此必须在每个匹配项后附加 }并从每个匹配项中删除不在字符串开头的第一个字符。或者,如果您可以获得捕获的结果,则可以使用
(^|[^{])([{]\w+)(?=[}](?![}]))

然后检索捕获组 2并附加 } .

关于regex - 正则表达式匹配 {asdf} 但不匹配 {{asdf}},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788523/

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