获取抓取网页中超链接的查询字符串值

问题描述 投票:0回答:2

我正在尝试从 URL 查询中提取值。 这是输入文本的一部分:

u0026amp;sw=0.1\u0026amp;t=vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug%3D

我需要隔离

t=
%3D
之间的子字符串以获得:

vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug

到目前为止,我正在使用这个

[^(t=)]\S{42}
,但它匹配所有字符串,我如何让它只匹配该
t
值?

php regex substring query-string text-extraction
2个回答
1
投票

您链接到的页面似乎不包含您正在搜索的字符串?但要匹配页面中任何位置的该字符串,您需要...

/t=\S{42}/

我认为不需要字符类

[...]
或带括号的子模式...?

编辑#1

但是,如果您尝试提取 42 个字符的标记,那么您需要一个带括号的子模式...

/t=(\S{42})/

编辑#2

提取token的示例。我已将其从 42 个字符更改为 43 个字符,因为您的所有示例似乎都包含 43 个字符的标记。

// This is just some example text from which we want to extract the token...
$text = <<<EOD
SomeText=jkasdhHASGjajAHSKAK?asdjladljasdllkasdjllasdasdl
asdjasiSTARTHERE;t=vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug%3DENDHEREasdasd
SomeMoreText;t=ThisIsTooShort%3Dklaksj
EOD;

if (preg_match('/;t=([a-zA-Z0-9_-]{43})%3D/',$text,$matches)) {
    // Match... vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug
    echo 'TOKEN: '.$matches[1];
} else {
    // No match
}

我已将模式更改为更具限制性,而不是任何非空格字符。现在它可以是任何字母、数字、下划线或连字符。现在必须以

%3D
结尾,并且“t=”之前有一个分号(“;”)。


1
投票

我没有使用过 php 的正则表达式引擎,但除非它违反 posix 标准和地球上所有其他正则表达式引擎,

[^(t=)]
将匹配除
t
=
(
)
之外的任何字符。因此,您的正则表达式将匹配后跟 42 个非空白字符。它与您的字符串匹配,因为令牌中实际上有 43 个字符。 你的意思可能是
^t=\S{43}$
,或者类似的东西,这可能取决于你用它做什么。

© www.soinside.com 2019 - 2024. All rights reserved.