使用正则表达式检查PHP中的特定模式

使用正则表达式检查PHP中的特定模式,php,regex,Php,Regex,我试图在PHP中创建以下正则表达式以匹配以下内容: [2013-01-01 12:34:12.123] [USERNAME] something 我可以得到第一部分的一部分,但我是新的正则表达式在php中,任何帮助是感激的 重要提示:上面的任何空间都可以是一个或多个空间 (这是我目前得到的) 我使用这个工具来测试我的正则表达式是否匹配:(只是想确认它是一个正常的工具) 更新:为了说明更多内容,一些内容可以是任意数量的文本,上面的空格可以是任意数量的空格,用户名也可以是任意数量的文本 \[\d{

我试图在PHP中创建以下正则表达式以匹配以下内容:

[2013-01-01 12:34:12.123] [USERNAME] something
我可以得到第一部分的一部分,但我是新的正则表达式在php中,任何帮助是感激的

重要提示:上面的任何空间都可以是一个或多个空间

(这是我目前得到的)

我使用这个工具来测试我的正则表达式是否匹配:(只是想确认它是一个正常的工具)

更新:为了说明更多内容,一些内容可以是任意数量的文本,上面的空格可以是任意数量的空格,用户名也可以是任意数量的文本

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

你对自己的规则不太明确。例如,第一部分可能需要是日期,但正则表达式可以匹配月份的
13
。可以吗?还有,什么是有效的“用户名”或“什么东西”

谨此陈辞:

/^
\[ # "[" 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
注意:您可以使用“\d”而不是“[0-9]”,并且(在本例中,为了灵活性),您可以使用“+”(“一个或多个字符”说明符)而不是“{4}”或“{2}”


p.p.S.:包含错误(不正确的反斜杠句柄),请尝试其他服务。

由于您的格式有分隔符(the
[]
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

您可以使用逐步浏览此正则表达式。

抱歉没有具体说明。某些内容可以是任何文本(以及任意数量的文本)。此外,第一个实际上是一个日期,但如果它不完全匹配到12则可以。用户名也可以是anything@user220755我不知道我是否会相信那个网站;我刚刚写了一个php脚本。如果用户名可以是“任何东西”,您可能需要在第二组括号之间将
\w+
更改为
*?
。最后一个问题是,如果我想要的东西不是我想要的东西,而是任何东西的全文(如:“某物和某物()[]!?”)或类似的东西,该怎么办。我试过了。*?但是这不起作用,任何帮助都是值得感谢的:)我正在尝试使用这个:/[\d{4}-\d{2}-\d{2}\s+[\d:.]+]\s+[(\w+)]\s+(*?)/@user220755您需要转义不属于字符类的
[
]
\[([^\]]*)\]\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