使用正则表达式来检查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(只是想确认它是一个好的工具)。

更新:为了更清楚地说明,可以有任何数量的文本,上面的空白可以是任何数量的空白,而USERNAME也可以是任何数量的文本。


由于您的格式具有分隔符( [] ),因此您不需要其他答案提供的检查。 相反,你可以简单地使用

[([^]]*)]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逐步浏览此正则表达式。


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

http://rubular.com/r/BPGvFN4kwi

你没有具体说明你的规则。 例如,第一部分可能需要是日期,但正则表达式可以匹配13个月。 可以吗? 还有什么使有效的“USERNAME”或“某事?”


/^[([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}”。

PPS:http://www.pagecolumn.com/tool/pregtest.htm包含错误(不正确的句柄反斜杠),请尝试其他服务。

链接地址: http://www.djcxy.com/p/77079.html

上一篇: Using regex to check on a specific pattern in PHP

下一篇: Find most recent date in list