2011-08-04 5 views
0

사이트 방문자의 USER_AGENT를 포함하여 많은 세부 정보가 포함 된 "server_var_dump"테이블의 mysql 테이블. 이제는 행이 포함 된 USER_AGENT 만 필요합니다. 이제 출력 문자열의 USER_AGENT와 일치하는 다음 스크립트를 작성했습니다. 지금은 내가 USER_AGENT이 포함 된 행을 인쇄하는 방법preg_match에서 단어를 포함하는 행을 어떻게 인쇄합니까?

$result = mysql_query("SELECT server_var_dump FROM pageviews LIMIT 0,10"); 

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    //printf("%s", $row["server_var_dump"]); 
    if(preg_match("/[USER_AGENT]/", $row["server_var_dump"])){ 
    echo "match found."; 
    } 
    else 
    echo "No matches found";  
} 

저를 제안하십시오 USER_AGENT에게있는 경우에만 그 라인을 인쇄해야?

감사합니다.

+0

샘플 입력 (예 : server_var_dump 열의 샘플 값)을 게시 할 수 있습니까? –

답변

1

?

$match_found = false; 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    if(preg_match("/[USER_AGENT]/", $row["server_var_dump"])){ 
     echo $row["server_var_dump"]; 
     $match_found = true; 
     break; 
    } 
} 
if(!$match_found) { 
    echo "No matches found"; 
} 

양자 택일로, 당신은과 같이 일치하는 값을 얻을해야합니다 :

$match_found = false; 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $matches = array(); 
    if(preg_match("/[USER_AGENT](.+)/", $row["server_var_dump"], $matches)){ 
     echo $matches[1]; 
     $match_found = true; 
    } 
} 
if(!$match_found) { 
    echo "No matches found"; 
} 
+0

행에 많은 데이터가 포함될 수 있습니다. OP에서 "[USER_AGENT]"문자열이 포함 된 행을 원한다고 생각합니다. –

+0

더 나은 접근 방식은 다음과 같을 것입니다. [/ \ n ([^ \ n] * \ [USER_AGENT \] [^ \ n] *) /' –

1
if(preg_match("/.*\[USER_AGENT\].*/" //don't forget escape [ and ] chars as Salaman A said 
    , $row["server_var_dump"],$matches)){ 
    //. is every char except newline char, So,you should get all string 
    echo "match found."; 
    //use $matches[0] 
} 
else 
    echo "No matches found"; 

예 : 당신이 그것을 도착 했더 단지 행을 인쇄 잘못 무엇

preg_match('/.*a.*/',"bc\nbac\nxy",$m); 
print($m[0]); //prints bac 
+0

'['와']'는 패턴의 특수한 메타 문자입니다. 그들을 탈출하는 것을 고려하십시오. –

+0

@Salaman A : 질문에서 복사 한 것입니다. 나는 그게 모범이 될 것입니다. HTTP_USER_AGENT가되어야합니다. – RiaD

+0

음 ... 질문에서 복사하는 것이 의미가 있지만 그렇지 않을 수도 있습니다 ... 패턴'/.* [USER_AGENT]. * /'은 문자열'U', CIA 요원도 일치 할 것입니다. –

0
오/P는

확인 부분은 다음과 같이이다 : 나는 줄 때 http://pastebin.com/e1qHG64Q

$result = mysql_query("SELECT server_var_dump FROM pageviews LIMIT 0,10"); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
$found = false; 
$lines = explode("\n", $row["server_var_dump"]); 
// $lines = explode("\\n", $row["server_var_dump"]); 
for ($x = 0; $x < count($lines); $x++) { 
    if(preg_match("/[HTTP_USER_AGENT]/", $row["server_var_dump"])==TRUE) 
    //if (strstr($lines[$x], "[USER_AGENT]")==TRUE) 
    { 
     echo $lines[$x]; 
     $found = true; 
     break; 
    } 
} 

그것은 나에게/배열 배열 배열 배열을 좋아해요 strstr 제안 된 것처럼 제공 할 때 그것을 제공합니다/p array (array (array ( ./n과 함께 o/p를 폭발시키는 것은 아마 작동하지 않습니다. 다른 USER_AGENT 라인을 얻으려면 어떻게해야할까요?

0

해킹있어! ;)

$result = mysql_query("SELECT server_var_dump FROM pageviews LIMIT 0,10"); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
$found = false; 
$data=str_replace("=>"," ",$row["server_var_dump"]); 
$lines = explode("\n", $data); 

// $lines = explode("\\n", $row["server_var_dump"]); 
    str_replace("\n"," ",$row["server_var_dump"]); 
for ($x = 0; $x < count($lines); $x++) { 
    if(preg_match("[HTTP_WAP_CONNECTION]", $lines[$x])==TRUE){ 
    //if (strstr($lines[$x], "[USER_AGENT]")==TRUE) 
    //{ 
      //if(strpos($lines[$x],"[HTTP_USER_AGENT]")){ 
        //echo substr($lines[$x],18); 
    $y=$x-1; 
    echo "$lines[$y] \n"; 
    } 
관련 문제