你能告訴我的正則表達式從下面拍攝行類名:大廈正則表達式表達
[2011-09-14 20:43:31:943 GMT][E08C17F94E8.http-8080-Processor21]com.abc.MyClass] INFO login successful
在這裏,我需要捕捉MyClass
。
到目前爲止,我可以用(?i)^(?:[^\[]*\[){3}
捕捉到整個com.abc.MyClass
但我無法捕捉MyClass
。
任何幫助,非常感謝。
謝謝!
你能告訴我的正則表達式從下面拍攝行類名:大廈正則表達式表達
[2011-09-14 20:43:31:943 GMT][E08C17F94E8.http-8080-Processor21]com.abc.MyClass] INFO login successful
在這裏,我需要捕捉MyClass
。
到目前爲止,我可以用(?i)^(?:[^\[]*\[){3}
捕捉到整個com.abc.MyClass
但我無法捕捉MyClass
。
任何幫助,非常感謝。
謝謝!
如果您可以假設永遠不會有那最後一個後面的括號內,這是很簡單的:
(\w+)\][^]]$
此捕獲所有直接在字符串中的最後]
前的字母數字字符的。
注意:您不需要執行[^\]]
,因爲PCRE的規範說如果]
是字符列表中的第一個,則不需要轉義它。
編輯:既然你不能假設沒有括號,這裏是另外一個,將工作:
\[.+?\]\[.+?\].*?(\w+)\]
該扔掉了前兩個集支架,和前抓住的字母數字字符的最大塊下一個括號。在.+?
的?
使它成爲非貪婪倍頻,所以它會匹配儘可能少的字符可能,這使得這個正則表達式非常簡單和高效。
沒有任何反對daxnitro,但那正則表達式讓我想放棄編程。
如果有可能爲年底有括號(即說:「登錄成功」的部分),你可以使用這個:
^\[[^]]*\]\[[^]]*\][^]]*\.([^]]+)\].*$
讓我們看看我能不能打破這一點...
^\[[^]]*\]
第一托架,所有以下非「]」字符,並且右括號匹配。這是[2011-09-14 20:43:31:943 GMT]
的一部分。
\[[^]]*\]
然後匹配的開口支架,所有以下非「]」字符,並且另一個右括號。這是[E08C17F94E8.http-8080-Processor21]
部分。
[^]]*\.([^]]+)
然後匹配的所有非「]」字符,後跟一個句點,接着是一個或多個非「]」字符。這是com.abc.MyClass
部分。 MyClass
部分與括號中的部分匹配。
\].*$
匹配的右括號和字符串的其餘部分。這是] INFO login successful
部分。
因此,如果在您的示例中將^\[[^]]*\]\[[^]]*\][^]]*\.([^]]+)\].*$
替換爲$1
,則只剩MyClass
。
您使用哪種語言? – Chriszuma
最好的正則表達式是'/(MyClass)/'。如果你需要更通用的東西,儘量更通用。 – sidyll
'。+ abc \。([\ w] +)。*'會起作用...更多詳情? – Andy