首页 > 解决方案 > 从 URL 字符串中获取令牌

问题描述

我试图从 URL 字符串中获取令牌。

示例 URL(显然已更改为不发布敏感内容):

https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb&parameter2=some_value

我正在尝试制作一个只返回令牌的正则表达式。

https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb ¶meter2= some_value

我首先搜索“token=”,然后将其从结果中排除。为此,我尝试了不匹配的组和其他解决方案。但是,我目前正在环顾四周。然后我匹配我想要返回的令牌。这似乎奏效了。我的问题是,URL 可能包含也可能不包含更多参数。因此,我又进行了一次环顾,说该标记要么后跟一个“&”,要么是(行/字符串)“$”的结尾。这是麻烦的部分。

我目前的正则表达式:

(?<=token\=)([\w\d\S]*)(?=[\&|$])
Flags: gm (as of now)

看到它在行动

如链接所示,它可以工作....有点。当 URL 字符串仅包含令牌时,它不起作用。

令牌是 20 个字符,所以我想出了以下变体:

(?<=token\=)([\w\d\S]{1,20})
Flags: gm (as of now)

看到它在行动

这工作正常,但是我正在自动化工作流程,并且令牌可能会在未来的更新中发生变化,所以我想尽可能少地进行维护。

我不能在 "token=" 和 ("&" 或 "$" end-of-(line|string)) 之间搜索字符串真的是对的吗?

编辑

URL中也可能有#anchors,如果我只是检查下一个&符号,它可能会无意中包含在令牌的一部分中。同样通过按照一些建议执行此操作,它可以跨越多行,如HERE所示。

标签: regexpowershellurltoken

解决方案


此功能使用UriHttpUtility类内置于 .NET / PowerShell :

$url0 = 'https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb';
$url1 = 'https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb&parameter2=some_value';

[System.Web.HttpUtility]::ParseQueryString(([uri]$url0).Query)['validation.token'];
[System.Web.HttpUtility]::ParseQueryString(([uri]$url1).Query)['validation.token'];

推荐阅读