我正试图从该字符串中提取3BF50B3A9BCB2BC8E40256F30B7F2C22令牌。
$longtext="rt%3D280'; HdfJson['postToken'] = '3BF50B3A9BCB2BC8E40256F30B7F2C22';HdfJson['googleUrlHl'] =";
$token=preg_replace("/('[''postToken']'s'='s)(''[a-zA-Z0-9]+'')(';)/u","$2",$longtext);
echo $token;
结果是这样的:
rt%3D280'; HdfJson['postToken'] = HdfJson['googleUrlHl'] =
如何仅提取令牌?
您还需要用.*
匹配前一个和后一个字符,以便只有整行被您指定的组替换。
.*(?:'[''postToken']'s'='s)''([a-zA-Z0-9]+)'';.*
| |
Here Here
演示
代码:
<?php
$longtext="rt%3D280'; HdfJson['postToken'] = '3BF50B3A9BCB2BC8E40256F30B7F2C22';HdfJson['googleUrlHl'] =";
$token=preg_replace("~.*(?:'[''postToken']'s'='s)''([a-zA-Z0-9]+)'';.*~u","$1",$longtext);
echo $token;
?>
输出:
3BF50B3A9BCB2BC8E40256F30B7F2C22
您不需要使用preg_replace来执行此操作,如果您想从字符串中提取某些内容而不修改它,则要使用的函数是preg_match
。示例:
$str = "rt%3D280'; HdfJson['postToken'] = '3BF50B3A9BCB2BC8E40256F30B7F2C22';HdfJson['googleUrlHl'] =";
$re = '/'QHdfJson['postToken'] = ''E([[:xdigit:]]+)';/';
// ↑_____________↑
if (preg_match($re, $str, $m)) // |
$token = $m[1]; // first capturing group
在'Q
和'E
之间,所有特殊字符都被忽略(模式分隔符除外)。将文本字符串复制/粘贴到模式中是很有用的,而不必问太多关于必须转义或不转义的问题(有关信息,只需要转义[
)
[:xdigit:]
字符类仅包含十六进制字符。但如果您想更严格,可以将其更改为不包含[a-f]
的[A-F0-9]
。