用于在源代码中查找令牌的 C# 正则表达式

本文关键字:正则表达式 令牌 查找 源代码 用于 | 更新日期: 2023-09-27 18:28:14

我需要一些比我更了解正则表达式的人的帮助。我的问题是想要发布一个表单,但需要一个"重新加载令牌",需要发布。reloadToken 可以在页面源代码的隐藏值中找到,例如:

<input type="hidden" name="reloadToken" value="80c52d77d3e2eeb32fac3a6940ab6cc4" />

reloadToken 的值每次页面加载都会更改,我现在发送一个 GET 请求并将源代码保存在变量中,使用正则表达式我应该能够在源中搜索 reloadToken,但我对正则表达式的了解接近于零。

我希望有人可以帮助我使用正则表达式。

还有一件事,页面源代码中有更多的 reloadToken,但它们都具有相同的值,所以这应该无关紧要吧?

提前谢谢。

用于在源代码中查找令牌的 C# 正则表达式

其他答案忘记的是,您正在使用 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=")([^"]*)