정규식 질문입니다!!


아래 텍스트에서 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

  • 2016년 04월 20일에 작성됨

조회수 182


2 답변


좋아요
0
싫어요
채택취소하기

자바 버전의 방법은 다음과 같습니다.

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를 위해서 \\와 같이 두번 적어주어야 합니다.

  • 2016년 04월 20일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 정말 감사합니다!! 이걸로 몇시간을 보낸건지...ㅠㅠ 잘되네요!!!    정현성   2016.4.20 22:02     

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))

위 코드의 아래에 있는 실행하기 버튼을 누르면 직접 실행해 보실 수 있어요.

  • 2016년 04월 20일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 04월 20일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • Python에서는 정상적으로 처리되는데 Java에서는 ?P 이 구문때문에 에러가 발생하면서 처리되지 않네요ㅠ    정현성   2016.4.20 17:28     
  • 별도 답변으로 자바를 달았습니다.    정두식   2016.4.20 18:09     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close