2016-06-22 9 views
0

옵션 그룹을 캡처하는 방법 -정규 표현식 :이 문자열에서 그룹의 수를 캡처 할

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);(.*) 

이것은 다음 그룹을 caputures - 다음과 같이 내가 쓴 정규식은

%May 11 10:03:49:448 2000 AB-CDE SHELL/6/SHELL_CMD: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info 
%May 11 10:03:51:122 2000 AB-CD-E SSH/6/SSH_LOGOUT: STEL user manager (IP: 172.0.0.0) logged out. 

에게 첫 줄부터 -

1. Group: May 
2. Group: 11 
3. Group: 10:03:49 
4. Group: 2000 
5. Group: SHELL 
6. Group: 6 
7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager 
8. Group: Command is display info 

이것은 두 번째 줄을 선택하지 않습니다. 마지막 절에서

나는 그룹 7 옵션

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);?(.*) 

출력 만들기 시도 :

1.1 Group: May 
1.2. Group: 11 
1.3. Group: 10:03:49 
1.4. Group: 2000 
1.5. Group: SHELL 
1.6. Group: 6 
1.7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info 
1.8. Group: 

2.1. Group: May 
2.2. Group: 11 
2.3. Group: 10:03:51 
2.4. Group: 2000 
2.5. Group: SSH 
2.6. Group: 6 
2.7. Group: STEL user manager (IP: 172.0.0.0) logged out. 
2.8. Group: 

을하지만 여전히 내 요구 사항을 충족하지 않습니다. 1.7 라인이 왜 쏟아지지 않았는가? 그리고 2.8 출력을 원한다면 2.8과 2.7은 두번째 라인이 없기 때문에 비어 있어야합니다.

우리가 정규식을 사용하여 이것을 달성 할 수있는 방법이 있습니까?

+0

I는 정규식 작은 또 다른 문제에 직면하고 - 오전 13 01 % : 10 : 00 : 942 2016 HP OPTMOD/4/MODULE_IN : -Slot = 3; GigabitEthernet3/0/0 : 송수신기는 1000_BASE_SX_SFP입니다. 이 줄의 경우, 다섯 번째 캡처 그룹은 으로 표시됩니다. OPTMOD/4/MODULE_IN : -Slot = 3; GigabitEthernet3 : 하지만이 옵션은 OPTMOD로만 설정해야합니다. 나는 그것이 여러 줄로 된 것 같아요. 줄에. 그러나 그것을 고치는 법을 알 수 없었다. –

답변

1

사용 비 캡처 옵션 그룹 ((?:)) :이 그룹 (7)가 선택하게됩니다

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(?:(.*);)?(.*) 

.

용도 : https://regex101.com/r/oS3bN6/1

+0

감사합니다. 완벽하게 작동했습니다. –