0

以下に一致するように、PHP で次の正規表現を作成しようとしています。

[2013-01-01 12:34:12.123] [USERNAME] something

最初の部分の一部を取得することはできますが、php で正規表現を使用するのは初めてです。

重要な注意: 上記のスペースは、1 つ以上のスペースである可能性があります。

(これは私がこれまでに得たものです)

/^[\[][0-9]{4}-[0-9]{2}-[0-9]{2}]/

このツールを使用して、正規表現が一致することをテストしています: http://www.pagecolumn.com/tool/pregtest.htm (これが問題ないツールであることを確認したいだけです)。

更新:さらに明確にするために、何かは任意の量のテキストである可能性があり、上の空白は任意の量の空白である可能性があり、USERNAMEも任意の量のテキストである可能性があります.

4

3 に答える 3

1
\[\d{4}-\d{2}-\d{2}\s+[\d:.]+\]\s+\[\w+\]\s+something

http://rubular.com/r/BPGvFN4kwi

あなたはあなたのルールについて具体的ではありません。たとえば、最初の部分はおそらく日付である必要がありますが、正規表現13は月に一致する可能性があります。それは大丈夫ですか?また、有効な「ユーザー名」または「何か」とは何ですか?

于 2013-03-29T04:30:25.163 に答える
1
/^\[([0-9]{4}-[0-9]{2}-[0-9]{2})\s+([0-9]+:[0-9]+:[0-9]+(?:\.[0-9]+)?)+\]\s+\[([^\]]+)\]\s+(.+)/

コメント付き:

/^
\[ # "[" is a special char and should be escape
    ([0-9]{4}-[0-9]{2}-[0-9]{2}) # Use brackets for group and capture (see $matches in php function)
    \s+ # One or move space chars (space, tab, etc.)
    ([0-9]+:[0-9]+:[0-9]+(?:\.[0-9]+)?)+ # "(?: )" is a group without capturing
\]
\s+
\[([^\]]+)\] # "[^\]]+" - one or more any char except "]"
\s+
(.+) # One or more any char
/x

PS: "[0-9]" の代わりに "\d" を使用できます (この場合、柔軟性のために) "{4}" の代わりに "+" ("1 つ以上の文字" 指定子) を使用できます。 "{2}"。

PPS: http://www.pagecolumn.com/tool/pregtest.htmにはバグ (不適切なハンドルのバックスラッシュ) が含まれています。別のサービスを試してください。

于 2013-03-29T05:03:23.437 に答える
0

形式には区切り文字 ( []s) があるため、他の回答が提供するチェックは必要ありません。代わりに、単に使用できます

\[([^\]]*)\]\s+\[([^\]]*)\]\s+(.*)

に分解する

\[([^\]]*)\] // Capture all non-] chars within [ and ]; this is the date
\s+ // some space
\[([^\]]*)\] // Capture all non-] chars within [ and ] again; this is USERNAME
\s+ // some space
(.*) // Capture all the text after; this is something

Debuggexを使用して、この正規表現を順を追って説明できます。

于 2013-03-29T05:16:38.753 に答える