正向前瞻+重叠匹配正则表达式

问题描述 投票:2回答:2

我正在寻找一个正则表达式匹配所有%,后面没有有效的2字符十六进制代码(a-fA-F0-9中的2个字符)。我提出了(%)(?=([0-9a-fA-F][^0-9a-fA-F]|[^0-9a-fA-F])),它运作良好,但在golang中不受支持,因为积极前瞻(?=)。

我怎样才能翻译它(或者让它变得更简单?),以便它可以与go一起使用?

例如,给定字符串%d%2524e%25f%255E00%%%252611%25,它应匹配第一个%和前两个%%%子字符串。

不:Kua zxsw Poi

regex go
2个回答
1
投票

我只在regex101(标记为golang regex)上尝试了这个,但似乎它按预期工作:

https://regex101.com/r/y0YQ1I/2

或者更简单:

%[0-9a-fA-F][0-9a-fA-F]|(%)

0
投票

这里真正的挑战是位置19和20的匹配是重叠的,这意味着我们不能使用任何内置的“FindAll ...”函数,因为它们只能找到非重叠的匹配。这意味着如果我们想要找到它们,我们必须在后续匹配索引之后重复匹配正则表达式。

对于正则表达式本身,我使用了非捕获组%[0-9a-fA-F]{2}|(%) 而不是前瞻断言。此外,正则表达式还将匹配字符串末尾的百分号,因为它们不能跟两个十六进制数字:

(?:...)
© www.soinside.com 2019 - 2024. All rights reserved.