正则表达式匹配

时间:2012-04-07 22:30:21

标签: php regex

T = vjVQa1PpcFMYuRsz10_H-1z41mWWe8d6ENEnBLE7gug

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

到目前为止,我使用的是[^(t =)] \ S {42},但是它匹配所有字符串,我如何才能将其与源页面中的字符串匹配来自view-source:http: //www.youtube.com/watch?v=opQ9GzRe5qs

感谢

2 个答案:

答案 0 :(得分: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 =”之前有一个分号(“;”)。

答案 1 :(得分:1)

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