2014-09-25 34 views
0

我有以下正則表達式(?s)^(?<=.*Exception.*)<The server started in RUNNING mode.>,所以基本上我想找到任何Exception在服務器開始運行之前被拋出。Java正則表達式的後面

我有一個測試日誌文件,應該與給定的正則表達式匹配但不匹配。我如何匹配的是,我將整個日誌文件讀入一個字符串,並在該字符串上應用正則表達式。

在這個正則表達式中是否有我缺少的東西?

示例輸入:

應該匹配

Sep 25, 2014 9:17:28 AM za.co.hide.health.common.cache.impl.ReadAccessorImpl initializeCache 
INFO: Finished Caching cache.name.treatment.protocol.limit.period: 7 items cached 
Sep 25, 2014 9:17:29 AM org.springframework.cache.ehcache.EhCacheManagerFactoryBean destroy 
INFO: Shutting down EhCache CacheManager 
Sep 25, 2014 9:17:29 AM org.springframework.web.context.ContextLoader initWebApplicationContext 
SEVERE: Context initialization failed 
org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [classpath*:beanRefContext.xml], factory key [hide.health.clinicalsystem.bcl.treatmentProtocolService]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hide.health.clinicalsystem.bcl.treatmentProtocolService' defined in URL [file:/J:/Oracle/Middleware/Oracle_Home/user_projects/domains/AUTH/servers/AUTH_SER/tmp/_WL_user/treatment_protocol_deployment_ear/fctudi/APP-INF/classes/beanRefContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.context.support.ClassPathXmlApplicationContext]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocol' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'treatmentProtocolActivationDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocolActivationDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'treatmentProtocolDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocolDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'protocolStagesDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'protocolStagesDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities) 
    at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:387) 
    at org.springframework.web.context.ContextLoader.loadParentContext(ContextLoader.java:559) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:303) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
    at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:661) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
    at weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:241) 
    at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:198) 
    at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:183) 
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1783) 
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2807) 
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661) 
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) 
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24) 
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258) 
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:61) 
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) 
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80) 
    at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:222) 
    at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:414) 
    at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51) 
    at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200) 
    at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123) 
    at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:191) 
    at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:99) 
    at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) 
. 
. 
. 
<Sep 25, 2014 9:17:30 AM CAT> <Notice> <Log Management> <BEA-170027> <The server has successfully established a connection with the Domain level Diagnostic Service.> 
<Sep 25, 2014 9:17:30 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN.> 
<Sep 25, 2014 9:17:30 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 172.22.9.37:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[2]" is now listening on fe80:0:0:0:688a:1e43:b337:a3b:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Warning> <Server> <BEA-002611> <The hostname "DHTBMS02.hide.holdings.co.za", maps to multiple IP addresses: 172.22.9.37, fe80:0:0:0:688a:1e43:b337:a3b%12.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on fe80:0:0:0:0:100:7f:fffe:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[4]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[5]" is now listening on 0:0:0:0:0:0:0:1:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[3]" is now listening on fe80:0:0:0:0:5efe:ac16:925:7001 for protocols iiop, t3, ldap, snmp, http.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000331> <Started the WebLogic Server Administration Server "AUTH_SER" for domain "AUTH" running in development mode.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.> 
<Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.> 

如果不匹配

<Sep 25, 2014 9:17:30 AM CAT> <Notice> <Log Management> <BEA-170027> <The server has successfully established a connection with the Domain level Diagnostic Service.> 
    <Sep 25, 2014 9:17:30 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN.> 
    <Sep 25, 2014 9:17:30 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 172.22.9.37:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[2]" is now listening on fe80:0:0:0:688a:1e43:b337:a3b:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Warning> <Server> <BEA-002611> <The hostname "DHTBMS02.hide.holdings.co.za", maps to multiple IP addresses: 172.22.9.37, fe80:0:0:0:688a:1e43:b337:a3b%12.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on fe80:0:0:0:0:100:7f:fffe:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[4]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[5]" is now listening on 0:0:0:0:0:0:0:1:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <Server> <BEA-002613> <Channel "Default[3]" is now listening on fe80:0:0:0:0:5efe:ac16:925:7001 for protocols iiop, t3, ldap, snmp, http.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000331> <Started the WebLogic Server Administration Server "AUTH_SER" for domain "AUTH" running in development mode.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.> 
    <Sep 25, 2014 9:17:31 AM CAT> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.> 
Sep 25, 2014 9:17:28 AM za.co.hide.health.common.cache.impl.ReadAccessorImpl initializeCache 
    INFO: Finished Caching cache.name.treatment.protocol.limit.period: 7 items cached 
    Sep 25, 2014 9:17:29 AM org.springframework.cache.ehcache.EhCacheManagerFactoryBean destroy 
    INFO: Shutting down EhCache CacheManager 
    Sep 25, 2014 9:17:29 AM org.springframework.web.context.ContextLoader initWebApplicationContext 
    SEVERE: Context initialization failed 
    org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [classpath*:beanRefContext.xml], factory key [hide.health.clinicalsystem.bcl.treatmentProtocolService]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hide.health.clinicalsystem.bcl.treatmentProtocolService' defined in URL [file:/J:/Oracle/Middleware/Oracle_Home/user_projects/domains/AUTH/servers/AUTH_SER/tmp/_WL_user/treatment_protocol_deployment_ear/fctudi/APP-INF/classes/beanRefContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.context.support.ClassPathXmlApplicationContext]: Constructor threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocol' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'treatmentProtocolActivationDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocolActivationDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'treatmentProtocolDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'treatmentProtocolDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Cannot resolve reference to bean 'protocolStagesDTOBuilder' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'protocolStagesDTOBuilder' defined in class path resource [spring/treatment-protocol-core-context.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities) 
     at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:387) 
     at org.springframework.web.context.ContextLoader.loadParentContext(ContextLoader.java:559) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:303) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 
     at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:661) 
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
     at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
     at weblogic.servlet.internal.EventsManager.executeContextListener(EventsManager.java:241) 
     at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:198) 
     at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:183) 
     at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1783) 
     at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2807) 
     at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661) 
     at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822) 
     at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360) 
     at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356) 
     at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
     at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138) 
     at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124) 
     at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:213) 
     at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:208) 
     at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
     at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:70) 
     at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:24) 
     at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:729) 
     at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:42) 
     at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:258) 
     at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:61) 
     at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165) 
     at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:80) 
     at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:222) 
     at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:414) 
     at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51) 
     at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200) 
     at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30) 
     at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240) 
     at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169) 
     at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123) 
     at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:191) 
     at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:99) 
     at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64) 
     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
     at weblogic.work.ExecuteThread.run(ExecuteThread.java:254) 
    . 
    . 
    . 
+0

發佈您的輸入和期望的結果 – vks 2014-09-25 09:21:34

+0

java不會允許在lookbehind內的量詞。 – 2014-09-25 09:22:01

+1

提供了一個例子。 – 2014-09-25 09:24:06

回答

2

Lookbehinds需要是零寬度,從而量詞是不允許的。

更好地去除.*

(?s)(?<=Exception)<The server started in RUNNING mode.> 

假設你想捕捉的日誌

使用這所有的異常:

[\w]+Exception 

沒有必要使用向前看符號或lookbehinds的。

更新:

如果你只關心的是,如果服務器開始異常或沒有我想這會爲你做它:

(Exception[\s\S]*?The server started in RUNNING mode) 

你會得到以前的字符串匹配但不在第二個。

+1

如果'Exception'後面有很多字符會怎麼樣? – 2014-09-25 09:23:04

+1

'(?<= Exception)'在'^'怎麼可能? – anubhava 2014-09-25 09:23:44

+0

是的,類似'NullPointerException'或'RuntimeException' – 2014-09-25 09:24:29

1

預覽和向後看是零寬度。然而,一個允許在一個超前的內部使用一個正則表達式,而不是在一個向後看(至少,除非它是一個固定長度的正則表達式)。其原因很簡單,大多數正則表達式引擎不適用於向後應用正則表達式。

實際上這個規則也有例外,有些引擎會支持OP的正則表達式。但是,除非您使用這些特殊的正則表達式引擎之一,否則在lookbehind中不能使用可變長度的正則表達式(即,可以匹配可變長度子字符串的正則表達式),這是OP原始正則表達式的問題。

一個環視的很好的解釋可以在http://www.regular-expressions.info/lookaround.html

找到可以解決的問題,而無需使用回顧後。試試這個表達式:

(\w+Exception).*<The server started in RUNNING mode.>

如果有異常發生的服務器在運行模式開始前,也捕捉組中的第一個這樣的異常時,此匹配。如果您只想確定發生了異常,則可以刪除圓括號。

+0

這是否意味着不可能做我想要做的事情表達? – 2014-09-25 10:05:22

+0

那麼,找到一種方法來使用兩個正則表達式來做到這一點,但是如果有一個正則表達式來完成這項工作本來就不錯。 – 2014-09-25 10:27:01

+0

我用一個正則表達式更新了我的答案,我希望能解決問題 – 2014-09-25 10:47:13