0

t= vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug

其中粗体区域是 42 个字符的标记

到目前为止,我正在使用这个 [^(t=)]\S{42},但它匹配所有字符串,我如何让它只匹配来自这里查看源的源页面:http://www .youtube.com/watch?v=opQ9GzRe5qs

谢谢

4

2 回答 2

1

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

/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=”之前有一个分号(“;”)。

于 2012-04-07T22:41:38.033 回答
1

我没有使用 php 的正则表达式引擎,但除非它违反 posix 标准并且地球上所有其他正则表达式引擎, [^(t=)]否则将匹配除 a t=(或之外的任何字符)。因此,您的正则表达式将匹配后跟 42 个非空白字符。它与您的字符串匹配,因为您实际上在令牌中有 43 个字符。你可能的意思是^t=\S{43}$,或者类似的东西,它可能取决于你用它做什么。

于 2012-04-07T22:46:18.337 回答