我正在尝试在PHP中创建以下正则表达式以匹配以下内容:
[2013-01-01 12:34:12.123] [USERNAME] something
我能够获得第一部分的一部分,但我是php中的regex的新手,感谢任何帮助。
重要提示:上面的任何空格都可以是一个或更多空间。
(这是我到目前为止所得到的)
/^[\[][0-9]{4}-[0-9]{2}-[0-9]{2}]/
我正在使用此工具测试我的正则表达式匹配:http://www.pagecolumn.com/tool/pregtest.htm(只是想确认它是一个没问题的工具)。
更新:为了更加充实,可以是任意数量的文本,上面的空格可以是任意数量的空格,USERNAME也可以是任意数量的文本。
答案 0 :(得分:1)
\[\d{4}-\d{2}-\d{2}\s+[\d:.]+\]\s+\[\w+\]\s+something
http://rubular.com/r/BPGvFN4kwi
您没有具体说明您的规则。例如,第一部分可能需要是一个日期,但正则表达式可以匹配该月的13
。这样可以吗?是什么使有效的“USERNAME”或“某事?”
答案 1 :(得分: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]”和(在这种情况下;为了灵活性)您可以使用“+”(“一个或多个char”说明符)而不是“{4 }“或”{2}“。
P.P.S。:http://www.pagecolumn.com/tool/pregtest.htm包含错误(错误处理反斜杠),尝试其他服务。
答案 2 :(得分: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逐步完成此正则表达式。