我需要一些对正则表达式有更多了解的人的帮助。 我的问题是要发布一个表单,但需要一个“重新加载”#39;为此,需要发布。 reloadToken可以在页面源中以隐藏值的形式找到,例如:
<input type="hidden" name="reloadToken" value="80c52d77d3e2eeb32fac3a6940ab6cc4" />
reloadToken的值改变了每个页面加载,我现在发送一个GET请求并将源保存在变量中,使用正则表达式我应该能够在源代码中搜索reloadToken,但我对正则表达式的了解是接近于零。
我希望有人可以帮我使用正则表达式。
还有另一件事,页面源中有更多reloadToken,但是它们都具有相同的值,所以它不重要吗?
提前致谢。
答案 0 :(得分:1)
答案 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=")([^"]*)