2014-09-26 4 views
0

이 문자열에서 3BF50B3A9BCB2BC8E40256F30B7F2C22 토큰을 추출하려고합니다.preg 대체 정규식 추출 문자열

$longtext="rt%3D280'; HdfJson['postToken'] = '3BF50B3A9BCB2BC8E40256F30B7F2C22';HdfJson['googleUrlHl'] ="; 

$token=preg_replace("/(\[\'postToken']\s\=\s)(\'[a-zA-Z0-9]+\')(\;)/u","$2",$longtext); 
echo $token; 


resultat이 같았다 :

rt%3D280'; HdfJson['postToken'] = HdfJson['googleUrlHl'] = 

어떻게 바로 토큰를 추출?

+0

당신이 단지 추출하고 싶기 때문에'preg_match'가'preg_replace' * (대체물로 사용됨)보다 ​​더 적합합니다 * –

답변

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

출력 : 당신이해야 할 preg_replace이다를 사용할 필요가 없습니다

3BF50B3A9BCB2BC8E40256F30B7F2C22 
+0

예, "/.* (([A-F0-9]) { 32}). */u "working – ro0xandr

+0

예. 가장 중요한 점은'. *'을 앞뒤에 추가해야한다는 것입니다. 방금 정규 표현식을 수정하고 해결책으로 게시했습니다. 필요에 따라 광산을 수정할 수 있습니다. 나는 이미 문제를 발견한다. –

0

, 당신은 뭔가를 추출 할 경우 문자열을 수정하지 않고 사용할 함수는 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:] 문자 클래스는 16 진수 문자가 포함되어 있습니다. 그러나 더욱 엄격 해지고 싶다면 [a-f]을 포함하지 않는 [A-F0-9]으로 변경할 수 있습니다.