Regex 构建正则表达式

Regex 构建正则表达式,regex,Regex,您能告诉我从下面一行捕获类名的正则表达式吗: [2011-09-14 20:43:31:943 GMT][E08C17F94E8.http-8080-Processor21]com.abc.MyClass] INFO login successful 在这里,我需要捕获MyClass 到目前为止,我能够使用(?I)^(?:[^\[]*\[){3} 但是我无法捕获MyClass 非常感谢您的帮助 谢谢!如果结尾(表示“登录成功”的部分)可能有括号,您可以使用以下内容: ^\[[^]]*\]\[[

您能告诉我从下面一行捕获类名的正则表达式吗:

[2011-09-14 20:43:31:943 GMT][E08C17F94E8.http-8080-Processor21]com.abc.MyClass] INFO login successful
在这里,我需要捕获
MyClass

到目前为止,我能够使用
(?I)^(?:[^\[]*\[){3}

但是我无法捕获
MyClass

非常感谢您的帮助


谢谢!

如果结尾(表示“登录成功”的部分)可能有括号,您可以使用以下内容:

^\[[^]]*\]\[[^]]*\][^]]*\.([^]]+)\].*$
让我们看看我能不能把它分解一下

^\[^]*\]
匹配第一个括号、所有后面的非“]”字符和一个右括号。这是
[2011-09-14 20:43:31:943 GMT]
部分

\[^]]*\]
然后匹配一个左括号、所有非“]”字符和另一个右括号。这是
[E08C17F94E8.http-8080-Processor21]
部分

[^]]*\.([^]]+)
然后匹配所有非“]”字符,后跟句点,后跟一个或多个非“]”字符。这是
com.abc.MyClass
部分。
MyClass
部分与括号中的部分匹配

\].$
匹配右括号和字符串的其余部分。这是信息登录成功的部分


因此,如果在示例中用
$1
替换
\[^]*\]\[^]*\][^]*\][^]]*\].([^]+)\].$
,那么剩下的就是
MyClass
,如果可以假设最后一个括号之后没有括号,那么就非常简单:

(\w+)\][^]]$
这将捕获字符串中最后一个
]
前面的所有字母数字字符

注意:您不需要执行
[^\]]
,因为PCRE规范说明,如果
]
是字符列表中的第一个字符,则不需要转义它

编辑:由于您不能假设没有括号,因此下面是另一个可以使用的括号:

\[.+?\]\[.+?\].*?(\w+)\]
这将丢弃前两组括号,并在下一个括号之前获取最大的字母数字字符块。
+?
中的
使它成为一个非贪婪的乘法器,因此它将匹配尽可能少的字符,这使得这个正则表达式非常简单有效


没有什么反对daxnitro的,但是这个正则表达式让我想放弃编程。

最好的正则表达式是
/(MyClass)/
。如果您需要更通用的东西,请尝试更通用。
+abc\([\w]+).
可以。。。更多细节?我不能硬编码任何类名,因为它可以是任何名称。文本可以是任何内容,而不仅仅是“登录成功”。。另外,MyClass可以是任何类,因为它是一个日志文件…这行吗?应该行。当我测试它时,它工作。不过,您可能需要将“^”和“$”标记添加到其中。。。(我现在要编辑)谢谢你关于[^]]的提示。让它看起来不那么恶心,但你的看起来还是干净的-/