preg替换正则表达式提取字符串


preg replace regex extract string

我正试图从该字符串中提取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]