使用正则表达式来检查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