preg заменяет регулярное выражение, извлекает строку

я пытаюсь извлечь 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'] =

как извлечь только знак?

0

Решение

Вам также необходимо сопоставить предыдущий и следующий символы: .* так что только целая строка будет заменена на указанную вами группу.

.*(?:\[\'postToken']\s\=\s)\'([a-zA-Z0-9]+)\';.*
|                                             |
Here                                        Here

DEMO

Код:

<?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
0

Другие решения

Вам не нужно использовать 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-F0-9] это не содержит [a-f],

0

По вопросам рекламы [email protected]