-2

私はこのコードを持っています:

{ 
    if ($4 ~search) 
    {
        match ($4, /([0-9]{2}\/([a-zA-z]{3})\/([0-9]{4}))/, dates)

        print dates[1] "\t" dates[2] "\t" dates[3]
    }
}

実行すると、次のようになります。

[19/Oct/2012:12:34:32
[19/Oct/2012:12:34:32
[19/Oct/2012:12:34:33

理論的には、それは機能していて、私が望むもののいくつかを生成していますが、どうすればそれを取得して19/Oct/2012提案を生成することができますか?

私の質問は、出力に2012年10月19日の日付だけを生成したいということです。

4

2 に答える 2

1

正規表現を修正する必要があります。

{
    match ($4,/[0-9]{2}\/[a-zA-z]{3}\/[0-9]{4}/,date)
    print date[0] 
}

出力します:

19/Oct/2012
19/Oct/2012    
19/Oct/2012

ノート:

  • 現在regexpは、月が数値の日付を探します。たとえば 19/10/2012、ではありません19/Oct/2012

  • キャプチャグループが一致していません(不均衡な括弧)

  • あなたの与えられた例では、年はそうではあり20012ません2012!?

  • からに行きdatesますdate

  • date[0]date[n]n番目のキャプチャグループを参照しながら、一致全体を格納します。

あなたの全体的な問題へのより良いアプローチがあるかもしれませんが、与えられたごくわずかな(そして非常に誤った)情報で言うことは不可能です。

編集:

残っていると思われる唯一の問題は、誤って配置されたキャプチャグループです。

{
    match ($4, /([0-9]{2})\/([a-zA-z]{3})\/([0-9]{4})/, dates)    
    print dates[1] "\t" dates[2] "\t" dates[3]
}

出力します:

19    Oct   2012
19    Oct   2012
19    Oct   2012

しかし、あなたの質問では、あなたはフォーマットでの出力が欲しいと述べています19/Oct/2012 (これは私の最初の提案がすることです) !?

于 2013-03-18T14:47:46.267 に答える
0

コードサンプルと出力のエラーを無視して、先頭の文字を削除する[だけsubstrの場合は、2番目の文字から一致させることができます。

print substr(date[0], 2)

ただし、最初に正しい一致を出力するように正規表現を修正することをお勧めします。

于 2013-03-18T15:07:13.543 に答える