【发布时间】:2021-07-12 15:48:44
【问题描述】:
如何部署正则表达式来匹配 URL 中可能有多个公式的字符串?
在下面的例子中,匹配的字符串恰好是“6c39b9cd8b5c4ae89aab69200a4608b1”?可以是任意 32 个字符,总是 32 个字符。
我一直在使用(.{0,32})((?=\?)|$),我认为它的意思类似于“最后一个斜杠后的最后 32 个字符,直到问号或结尾” - 但它在下面的示例 3/ 和 4/ 中捕获了两个组,它应该只捕获第一个。
1/ 在最后一个斜线之后,即 ...
https://www.example.com/folder/6c39b9cd8b5c4ae89aab69200a4608b1
2/ 但并不总是立即(即结束前可能是 32 个字符)...
https://www.example.com/folder/Extraneous-material-here-6c39b9cd8b5c4ae89aab69200a4608b1
3/ 除了,有时在所需文本之后会有一个查询字符串(因此,问号前有 32 个字符,但并不总是存在问号)...
https://www.example.com/folder/6c39b9cd8b5c4ae89aab69200a4608b1?v=593af44a9e9b4da6bb2ee491c949b033
4/ 有时可能在之后有一个查询字符串,而在之前有一些无关的文本......
https://www.example.com/folder/Extraneous-material-here-6c39b9cd8b5c4ae89aab69200a4608b1?v=593af44a9e9b4da6bb2ee491c949b033
...用我目前的表达方式,这个匹配 6c39b9cd8b5c4ae89aab69200a4608b1 和 593af44a9e9b4da6bb2ee491c949b033。
【问题讨论】:
-
您可以使用
([a-fA-F0-9]{32})(?:\?.*)?$正则表达式捕获该值。见this demo。 -
@WiktorStribiżewexample.com/folder/…和example.com/folder/…似乎错误地返回位INC查询字符串 “6c39b9cd8b5c4ae89aab69200a4608b1?V = 593af44a9e9b4da6bb2ee491c949b033”(第1场)和 “6c39b9cd8b5c4ae89aab69200a4608b1”(组1)。 6c39b9cd8b5c4ae89aab69200a4608b1 只需要一场比赛。
-
正则表达式匹配正确。这就是您需要访问的第 1 组值。你的编程环境是什么?
-
@WiktorStribiżew iOS 快捷方式,其匹配文本操作是正则表达式。它返回完整但包括查询字符串。
-
也许看看
(?:-|\/)(.{0,32})(?:$|\?)和第1组。示例:regex101.com/r/Md8R2i/1
标签: regex