как напечатать строку, содержащую слово из preg_match? - PullRequest
0 голосов
/ 04 августа 2011

Поле в таблице MySQL "server_var_dump", которое содержит много деталей, включая USER_AGENT посетителей сайта.Теперь мне нужны только строки USER_AGENT, содержащие строку.Теперь я написал следующий скрипт для соответствия USER_AGENT выходной строки.Теперь мне нужно распечатать только те строки, которые содержат USER_AGENT

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

Спасибо!

Ответы [ 4 ]

1 голос
/ 04 августа 2011

Что плохого в том, чтобы просто напечатать строку, как только вы ее получили?

$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";
}
1 голос
/ 04 августа 2011
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 голосов
/ 05 августа 2011

получил взломать! ;)

$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";
    }
0 голосов
/ 05 августа 2011

ok часть o / 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;
    }
}

, это дает мне o / p как массив массив массив массив, а когда strstr задается какпредположил, что он дает o / p-подобный массив (array (array (. Взрыв o / p с / n, вероятно, не работает). Любой другой хак, который я могу сделать, чтобы получить только строку USER_AGENT из него?

...