2014-12-04 2 views
0

그래서 여기 내 당황이다 : 정규식을 반복 일치와 옵션 그룹을 포함하는 모든 그룹

^.*System(.*)(\d{4}-\d{2}-\d{2})?\.log 

내가 괄호 안에이 옵션 그룹 (날짜)와 일치하는 정규 표현식을 필요가. 그러나이 그룹은 선택 사항이며 .+은 "열심히"이므로 날짜 그룹은 경기에 절대 참여하지 않습니다. 그래서 나는이 같은 일을 일치하도록 노력하고 있어요 :

/var/log/ws/SystemOut.appserver204.log 
/var/log/ws/SystemOut.appserver204.2014-10-22.log 
/var/log/ws/SystemErr.appserver208.log 
/var/log/ws/SystemErr.appserver212.2014-11-12.log 

그러나, 항상 선택 사양 일 그룹의 결과로, .log까지 모든 것을 차지 첫 번째 그룹, (.+)는, 결코 경기에 참여하지 않는다. 그룹을 선택 사항으로 만들지 않으면 날짜를 포함하기 시작하지만 위에서 언급 한 두 가지 경우는 일치하지 않습니다.

내가 성취하고자하는 일을 어떻게 할 수 있습니까? (참조 용으로 Java로 작업 중입니다.)

+0

그래서 날짜를 반환해야합니까? – Khanna111

+0

@ Khanna111 날짜뿐 아니라 모든 것이 일치해야하지만 날짜가 있으면 일치해야합니다. 그렇지 않다면 빼주세요. 머리가 머리에 못을 박았다. –

답변

0
^.*System.*\.(\d\d\d\d-\d\d-\d\d)\.log$ 

해야 할 일.

1

*greedy 연산자이므로 가능한 한 일치하고 정규 표현식의 나머지 부분이 일치하도록 허용합니다. "0 이상 - 가능한 한 적게"를 의미하는 비 욕심 많은 검색에는 *?을 사용하십시오.

^.*System.*?(\d{4}-\d{2}-\d{2})?\.log 

Live Demo

+0

굉장합니다. 이것은 정규식이 아닌 욕심 많은 것을 잡는 방법에 대한 Google 검색을하는 것이 쉽지 않은 것들 중 하나입니다. –

0

this sample에서 봐. 정규식 ^.*System(.+?)\.?(\d{4}-\d{2}-\d{2})?\.log은 그룹 1의 텍스트와 그룹 2의 날짜 (점 제외)와 일치합니다. 시각화 :

Regex visualization