t= vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug
其中粗体区域是 42 个字符的标记
到目前为止,我正在使用这个 [^(t=)]\S{42},但它匹配所有字符串,我如何让它只匹配来自这里查看源的源页面:http://www .youtube.com/watch?v=opQ9GzRe5qs
谢谢
您链接到的页面似乎不包含您正在搜索的字符串?但是要匹配页面中任何位置的字符串,那么您需要...
/t=\S{42}/
我认为不需要字符类[...]
或带括号的子模式......?
编辑#1
但是,如果您尝试提取该 42 字符标记,那么您将需要一个带括号的子模式......
/t=(\S{42})/
编辑#2
提取令牌的示例。我已将其从 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=”之前有一个分号(“;”)。
我没有使用 php 的正则表达式引擎,但除非它违反 posix 标准并且地球上所有其他正则表达式引擎,
[^(t=)]
否则将匹配除 a t
、=
、(
或之外的任何字符)
。因此,您的正则表达式将匹配后跟 42 个非空白字符。它与您的字符串匹配,因为您实际上在令牌中有 43 个字符。你可能的意思是^t=\S{43}$
,或者类似的东西,它可能取决于你用它做什么。