正規表現を使用してログのIPアドレスを数える方法

このQ&Aのポイント
  • 正規表現を使用してログのIPアドレスを数える方法を知りたい。
  • ログに表示されているIPアドレスの長さや文字列のバリエーションに対応する方法を教えてください。
  • grepコマンドを使用してログのIPアドレスを数える方法はありますか?
回答を見る
  • ベストアンサー

正規表現

2004-12-08[Tab]19:20:20[Tab]192.168.1.323[Tab]1[Tab] 上記のように書かれたログがあり、このログ数を数えたいのですが、IPアドレスが表示されているところがうまくいきません。IPアドレスは長さが違うものや、社内からすると、アドレスではない文字列の場合もあります。 何かよい方法はないでしょうか?? $fp_r = popen('grep -c \''.$log_r[$i]['logdate'].'[[:space:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9][[:space:]][0-9].[0-9].[0-9].[0-9][[:space:]]1[[:space:]]\' '.$fileName,"r");

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

じゃ、該当部分を [0-9a-z\.]+ でどうでしょう。 もし、文字列に大文字も含まれるならば [0-9a-zA-Z\.]+ となります。

aiurai54
質問者

お礼

popen('grep -c \''.$log_r[$i]['logdate'].'[[:space:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9][[:space:]][0-9a-zA-Z\.]+[[:space:]]1[[:space:]]\' '.$fileName,"r"); +のあとにそのままスペースの正規表現を入れても特に問題はないですよね? 上記のようにしましたが、値がとってこれませんでした。 いろいろと教えていただきありがとうございました。

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

PHPは使ったことがないのですが、 正規表現一般から考えてみます。 [0-9].[0-9].[0-9].[0-9] のところを、 (([0-9a-z]+)\.)+[0-9a-z]+ にしてみたらどうでしょう。 +というのは、「1回以上の繰り返し」という意味です。 自信なしです。

aiurai54
質問者

お礼

ありがとうございます。 ただ、やはりうまくいきません。 IPアドレスは”.”はありますが、社内だと”.”がない場合があります。

関連するQ&A

  • PHPでpopenでファイル出力

    下記のようにプログラムを作成しておりますが、 検索結果全体を読み込むことができません。 全て8000バイトくらいしか読み込むことができません。 何故でしょうか?? | more という文をgrep に追加してもできませんでした。 $fp_r = popen('nkf -e -Lu '.$fileName.' | grep \''ああ'\'',"r"); //ファイルの内容を全て読み込む $body=fread($fp_r,filesize($fileName)); $fp = fopen($preFile, "w"); chmod($preFile,0777); flock($fp, LOCK_EX); fputs ($fp, $body); flock($fp, LOCK_UN); fclose($fp); pclose($fp_r);

    • ベストアンサー
    • PHP
  • タブで囲まれた数値を取得するには?

    $fp_r = popen('grep -c \'\t2\t\' '.$fileName,"r"); 現在PHPで上記のようなファイルからある文字列を取得するプログラムを作成していますが、そのファイルの中に タブ2タブ と表示されたものがありこの値をとりたいのですが、 上記のコマンドではうまくとれません。 やはり、一度、配列に落とさなければいけないのでしょうか?? なぜこのような変な取り方をしたいかというと、 他にも年月日など、いろいろな数値があり、 普通に、数値のみでは値が多すぎて間違った答えになってしまうからです。

  • 正規表現についてお教え下さい

    正規表現についてお教え下さい。 )以外の全ての文字列(改行・Tab・空白等含む)の1回以上の繰返しという記述は正規表現ではどのような記述になるでしょうか? NoEditorで下記のような条件でgrepしようとしたのですがうまくいきません。 [[^[^\)]] \t\n\r\f]+ 具体的には下記のような5行があった場合、以下のような条件で1、2、3行目を抽出できるということを想定しています。 条件:AAA )以外の全ての文字列の1回以上の繰返し \) ※現状の条件の記述はAAA[[^[^\)]] \t\n\r\f]+\) 1行目 AAAあ(aaa) 2行目 AAA あ(aaa) 3行目 AAA あ 4行目 (aaa) 5行目 AAA)

  • 正規表現

    テキストファイルからコメント行以外から文字列"bbb"を含む 行をgrepで抽出したいと思っております。 コメント行→"#"で始まる行と"--"で始まる行 先頭にスペースがある場合もあるので、結局 先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 として、文字列"bbb"を含む行をgrepで抽出したいと思っています。 下記、foo.txtの中から下記の抽出対象の2行のみを抽出したい場合、 どういった正規表現を書けばいいか教えてください。 【foo.txt】 aaa bbb → 抽出対象 aaa bbb →抽出対象 # aaa # bbb →抽出対象外 #aaa # aaa --aaa --aaa -- aaa -- bbb →抽出対象外 -aaa -bbb - aaa ご存じの方がいらっしゃいましたら、よろしくお願い致します。

  • 正規表現の置換(EmEditor)

    Fireworksで書きだしたhtmlをEmEditorで修正中です。 name="●●●" を一括削除しようと正規表現を使った置換を試みていますが上手く出来ません。 検索する文字列に入れるサンプル文字を教えて頂けませんか。 ■検索したい文字列例(行頭に半角スペースあり) (半角スペース)name="c123_r4_c6" (半角スペース)name="c123_r5_c5" (半角スペース)name="c123_r6_c4" などです。 全てに共通するものは name=""、c123、_r、_c です。 4、5、6 の位置にある数字は変わります。 ■置換後の文字列 空白 (検索したい文字列の行頭半角スペースも削除) よろしくお願いします。

  • 正規表現

    質問させていただきます。 文字コード「Shift-JIS」で渡ってきた文字列を 英字とスペースはOKで、 それ以外の文字列が入力されていたら、エラーいう処理を しているのですが、うまくいきません。 ご教授よろしくお願いします。 // 半角にする $kana = mb_convert_kana($_POST['kana'], "r"); if ((ereg("^[a-zA-Z]+$", trim($kana))) == false) {   echo "エラーです"; } 全角スペースと半角スペースと英字はOKで、それ以外はNG としたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • 正規表現について

    今現在、PHPの勉強をしているのですが preg_match("/\nFrom:\s*(.+)\r/i", $sss, $aaaa) という文字列が出てきて困っています。 preg_match関数における\nFrom:とは一体何なんでしょうか。教えてください。

    • 締切済み
    • PHP
  • 正規表現の使い方

    仕事で悩んでいます。 私の仕事はログファイルから、月々何件アクセスしたか調べる仕事です。 コマンドプロンプトでsort、grep、wcなど色々使い方を勉強していくうち、 今度は難しいのが出てきて悩んでいます。 そのまま書き移したら、皆さんは分からないし、会社のプライバシーに関わるので、簡単に書きます。 例えば、 ABC10 ABC10 ZP-22 AB-V5 AA10 PP122 と数字があり、 頭文字のAの部分を集めたいところに私は grep -e "資料番号の頭文字" 入力ファイル > 出力ファイル とコマンドプロンプトで打ち、下記の通りになりました。 AB-V5 AA10 AB-V5 AA10 だが、問題は途中にあるAB-V5は仲間ではないので、 それを省きたいのです。 上記の例は数少ないので手入力でもできますが、実際は1万以上もあるので、 手入力はできません。 上司に聞いたところ、 A[0-9].* の正規表現を使えと言われましたが、 全くやり方わかりません。 正規表現について勉強したのですが、全く理解ができず、仕事が遅れています。 皆さんの知恵を借りたいと思います。 よろしくお願いします。

  • サクラエディタ 正規表現

    正規表現の書き方をネットで探しましたが、イマイチやりたいことが出来ないので、どなたか実際にかいてもらえませんか。 ・文頭のスペースやタブを除外して、'や--の行を検索する。 ・特定のフォルダを除外してGREPをかける。  例えば、aaa.txtというファイルにあいうえおという文字列が入力されていて、  そのファイルがC:\A、C:\B、C:\Cにあり、C:\Bだけを除外してGREPをかけたい  ※除外するフォルダ名の長さは不特定 ・検索したい単語の開始と終了は決まっていて、間に何文字入ってても(数字もあり)検索する  例えば、単語の開始が あいうえお で、終了が さしすせそ の場合 雑な質問で申し訳ないですが、どなたか回答お願い致します。

専門家に質問してみよう