用于在源代码中查找令牌的 C# 正则表达式
本文关键字:正则表达式 令牌 查找 源代码 用于 | 更新日期: 2023-09-27 18:28:14
我需要一些比我更了解正则表达式的人的帮助。我的问题是想要发布一个表单,但需要一个"重新加载令牌",需要发布。reloadToken 可以在页面源代码的隐藏值中找到,例如:
<input type="hidden" name="reloadToken" value="80c52d77d3e2eeb32fac3a6940ab6cc4" />
reloadToken 的值每次页面加载都会更改,我现在发送一个 GET 请求并将源代码保存在变量中,使用正则表达式我应该能够在源中搜索 reloadToken,但我对正则表达式的了解接近于零。
我希望有人可以帮助我使用正则表达式。
还有一件事,页面源代码中有更多的 reloadToken,但它们都具有相同的值,所以这应该无关紧要吧?
提前谢谢。
其他答案忘记的是,您正在使用 C#,它有自己的编译器escapes
大多数编译器都在正则表达式中镜像。
它们的模式可能有效,但您将在进入正则表达式之前与双引号的 C# 解析器转义作斗争,这可能会损害导致失败的模式。
在我的模式下面,我展示了如何使用 C# 中的文字转义@
将纯文本模式发送到 C# 中的解析器:
string data="<input type='"hidden'" name='"reloadToken'" value='"80c52d77d3e2eeb32fac3a6940ab6cc4'"";
string pattern=@"(?:reloadToken.+value="")(?<Token>[^'""]+)";
Console.WriteLine (
Regex.Match(data, pattern)
.Groups["Token"]
.Value);
// Output
// 80c52d77d3e2eeb32fac3a6940ab6cc4
否则模式说
-
(?: ... )
- 匹配但不捕获特定文本集。我们不需要捕获或匹配的文本,它只是锚文本;查看下一个... reloadToken.+value=""
- 实际文本"重新加载令牌",然后我们将通过指定表示匹配任何内容的.
来占用通用空间。但是我们希望匹配多个,因此我们添加一个+
这意味着 1 到多次。所以空间将被吞噬到字面上的value="
.(?<Token> ...)
-)
(
说这是一个比赛组。?<xxx>
命名匹配组。在我们的例子中,我们的匹配组将被命名为"Token",这将允许我们稍后使用该名称而不是索引从match capture group
(正则表达式术语(中提取它。[^'""]+
-[
to]
说这是一个集合定义。在我们的集合定义中,我们说^
而不是任何"
引号。所以我们想要匹配除引号之外的任何内容,最后我们说我们的匹配组可以匹配 1 个或多个字符+
。这将在第一个"
停止.
您可以使用此正则表达式捕获 reloadedToken 的值:
/name="reloadToken" value="('w*)"/
演示(查看右侧面板上的比赛信息(
希望对您有所帮助。
这应该适合您。您要获取的值是捕获组,而其余值则不是。
(?:name="reloadToken" value=")([^"]*)