regex - 从 URL 字符串中获取令牌
问题描述
我试图从 URL 字符串中获取令牌。
示例 URL(显然已更改为不发布敏感内容):
https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb¶meter2=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所示。
解决方案
此功能使用Uri和HttpUtility类内置于 .NET / PowerShell :
$url0 = 'https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb';
$url1 = 'https://example.com/file.extention?validation.token=kDa9udKcYp1Wo2ay5Lbb¶meter2=some_value';
[System.Web.HttpUtility]::ParseQueryString(([uri]$url0).Query)['validation.token'];
[System.Web.HttpUtility]::ParseQueryString(([uri]$url1).Query)['validation.token'];
推荐阅读
- python - 有一个“AttributeError:'Sheet'对象没有属性'write'”
- emacs - 有没有办法在公司模式下完成后自动添加空格?
- ios - 滚动时 UISwitch 在 CollectionViewCells 中重复/奇怪的覆盖
- python - 如何在 Django 中显示另一个网站的全部内容?
- uwp - 如何在 UWP 中获取当前使用的代码页?
- javascript - 如何传播数组的内部数组元素?
- php - 按另一个数组中的值对数组进行排序
- multithreading - 为什么比较和交换(CAS)算法是无锁同步的好选择?
- node.js - 将 ChaiHttp 与 beforeEach 或 before 方法一起使用
- javascript - 如何在 React Native 中获取 TextInput 相对于其父级或屏幕的光标位置