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