정규식 질문입니다!!
조회수 1952회
아래 텍스트에서 10.200.180.2, 10.200.180.3 값만 찾으려고 합니다. 문제는 앞에 64:16:8d:dc:6c:40 이와 같이 MAC정보가 있는 경우에만 IP정보가 선택이 되어야 합니다. 그래서 아래와 같은 정규식으로 64:16:8d:dc:6c:40 10.200.180.2, 00:02:a5:74:9b:19 10.200.180.3 이렇게 는 찾을수 있는데 찾은 대상에서 IP정보만 출력하게 할수 있을까요? 이게 정규식 한번으로 처리해야 하는거라 방법을 찾지 못하고 있네요ㅠ [A-Za-z0-9][A-Za-z0-9][:][A-Za-z0-9][A-Za-z0-9][:][A-Za-z0-9][A-Za-z0-9][:][A-Za-z0-9][A-Za-z0-9][:][A-Za-z0-9][A-Za-z0-9][:][A-Za-z0-9]A-Za-z0-9{3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
admin@Test_M7i# show | compare [edit interfaces fe-1/3/0 unit 0 family inet address 10.200.180.1/24]
- arp 10.200.180.5 mac 00:02:a5:74:9b:19;
- arp 10.200.180.5 mac 18:67:b0:b6:ae:8d; arp 10.200.180.6 { ... }
admin@Test_M7i> show arp no-resolve MAC Address Address Interface Flags 64:16:8d:dc:6c:40 10.200.180.2 fe-1/3/0.0 none 00:02:a5:74:9b:19 10.200.180.3 fe-1/3/0.0 permanent
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
자바 버전의 방법은 다음과 같습니다.
import java.io.Console; import java.util.regex.Pattern; import java.util.regex.Matcher; public class MyRegex{ public static void main(String[] args){ String searchTarget = "64:16:8d:dc:6c:40 10.200.180.2, 00:02:a5:74:9b:19 10.200.180.3 10.200.180.5 10.200.180.6"; Pattern pattern = Pattern.compile("[0-9a-e]{2}\\:[0-9a-e]{2}\\:[0-9a-e]{2}\\:[0-9a-e]{2}\\:[0-9a-e]{2}\\:[0-9a-e]{2}\\s(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"); Matcher matcher = pattern.matcher(searchTarget); while(matcher.find()){ System.out.println(matcher.group(1)); } } }
참고로 자바는 escape를 위해서
\\
와 같이 두번 적어주어야 합니다. -
capturing group이라는걸 이용하면 됩니다.
아래는 파이썬 코드인데요. search_target에 들어있는 ip를 찾아서 출력해 줍니다. regex를 보면 \s를 기준으로 그 이전의 MAC address가 있는 경우에만 그 뒤의 ip만 찾아 옵니다.
regex = r'[0-9a-e]{2}\:[0-9a-e]{2}\:[0-9a-e]{2}\:[0-9a-e]{2}\:[0-9a-e]{2}\:[0-9a-e]{2}\s(?P<url>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' search_target = "64:16:8d:dc:6c:40 10.200.180.2, 00:02:a5:74:9b:19 10.200.180.3 10.200.180.5 10.200.180.6" import re result = re.findall(regex, search_target) print("\n".join(result))
위 코드의 아래에 있는 실행하기 버튼을 누르면 직접 실행해 보실 수 있어요.
- Python에서는 정상적으로 처리되는데 Java에서는 ?P 이 구문때문에 에러가 발생하면서 처리되지 않네요ㅠ 알 수 없는 사용자 2016.4.20 17:28
- 별도 답변으로 자바를 달았습니다. 정토드 2016.4.20 18:09
댓글 입력