2013-03-29 25 views
0

我想在PHP中創建下面的正則表達式匹配如下:使用正則表達式來檢查特定的模式在PHP

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

我能夠得到第一部分的一部分,但我新正則表達式在PHP中,任何幫助表示讚賞。

重要提示:上述的任何空間可以是一個或更大的空間。

(這是我走到這一步)

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

我使用這個工具來測試我的正則表達式匹配:http://www.pagecolumn.com/tool/pregtest.htm(只是想確認這是一個不錯的工具)。

更新:到clerify多,事情就可以是任意數量的文本,空格以上可能是空格的任何量和USERNAME可能是任意數量的文本爲好。

回答

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這個正則表達式一步一步的。

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

http://rubular.com/r/BPGvFN4kwi

你沒有具體的關於你的規則。例如,第一部分可能需要是日期,但正則表達式可以匹配13。可以嗎?還有什麼使有效的「USERNAME」或「某事?」

+0

道歉不具體。東西可以是任何文字(和任何數量的文字)。另外,第一個實際上是一個日期,但如果它不完全匹配到12,那麼它是可以的。用戶名也可以是任何東西 – user220755

+0

此外,這並不匹配http://www.pagecolumn.com/tool/pregtest .htm – user220755

+0

@ user220755我不知道我是否信任該網站;我只寫了一個PHP腳本,它的工作。如果USERNAME可以是「任何事情,」你可能想改變'\ w +'來'。*?'第二套括號 –

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:可以用 「\ d」 而不是 「[0-9]」 和(在這種情況下,爲彈性)可以用 「+」 (「一個或多個字符」說明符)而不是「{4}」或「{2}」。

P.P.S:http://www.pagecolumn.com/tool/pregtest.htm包含錯誤(不正確句柄反斜線),嘗試另一種服務。