我正在寻找一个正则表达式匹配所有%
,后面没有有效的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
我只在regex101(标记为golang regex)上尝试了这个,但似乎它按预期工作:
https://regex101.com/r/y0YQ1I/2
或者更简单:
%[0-9a-fA-F][0-9a-fA-F]|(%)
这里真正的挑战是位置19和20的匹配是重叠的,这意味着我们不能使用任何内置的“FindAll ...”函数,因为它们只能找到非重叠的匹配。这意味着如果我们想要找到它们,我们必须在后续匹配索引之后重复匹配正则表达式。
对于正则表达式本身,我使用了非捕获组%[0-9a-fA-F]{2}|(%)
而不是前瞻断言。此外,正则表达式还将匹配字符串末尾的百分号,因为它们不能跟两个十六进制数字:
(?:...)