C#RegEx在源代码中查找令牌

时间:2014-10-29 17:00:15

标签: c# .net regex

我需要一些对正则表达式有更多了解的人的帮助。 我的问题是要发布一个表单,但需要一个“重新加载”#39;为此,需要发布。 reloadToken可以在页面源中以隐藏值的形式找到,例如:

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

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

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

还有另一件事,页面源中有更多reloadToken,但是它们都具有相同的值,所以它不重要吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式捕获reloadedToken的值:

/name="reloadToken" value="(\w*)"/

DEMO(查看右侧面板上的匹配信息)

希望它有所帮助。

答案 1 :(得分:1)

其他答案遗忘的是您正在使用C#,它有自己的编译器escapes,其中大多数都在Regex中镜像。

他们的模式可能会起作用,但是在它甚至到达正则表达式之前你将会对双引号的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="" - 实际文字&#34;重新加载令牌&#34;那么我们将通过指定匹配任何内容的.来占用通用空间。但我们希望匹配多个,因此我们添加+,这意味着1次或多次。因此,空间将被用于文字value="

  • (?<Token> ...) - ()表示这是一个匹配组。 ?<xxx>为匹配组命名。在我们的例子中,我们的比赛组将被命名为#34; Token&#34;这将允许我们稍后通过该名称而不是索引从match capture group(正则表达式术语)中提取它。

  • [^\""]+ - []说这是一个集合定义。在我们的定义中,我们说^而不是"引号。所以我们希望匹配除引号之外的任何内容,最后我们说匹配组可以匹配 + 1个或更多字符。哪个会在第一个"停止。

答案 2 :(得分:0)

这对你有用。您希望获得的值是一个捕获组,而其余的则不是。

(?:name="reloadToken" value=")([^"]*)