簡體   English   中英

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使用的函數是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:]字符類僅包含十六進制字符。 但是,如果您想更加嚴格,可以將其更改為不包含[af] [A-F0-9] [af]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM