버그 해결을 위한 모든 질문을 던져
+1 vote
212 views

안녕하세요 정규식 강의를 듣고있는데..

이놈이 영어라 잘 이해가 안가는 부분이 있고

여기저기 자료를 찾아봐도 이 부분에 대해 명쾌한 글이 없어 질문 드립니다.

 

정규식에서 ?:를 non-capturing group 이라 하고

\1 이나 \2 \3 \4 등을 numeric reference 라고 하던데

 

이 두개에 대해 설명 해주실 분 있으면 정말 감사드리겠습니다.

 

감사드립니다.

asked (22 point) , 212 views

1 답변

+3 votes
우수 답변

답변만 먼저 정리하자면 non-capturing group이란 사정에 의해서 regex에 괄호는 써야겠는데 캡쳐는 하고 싶지 않을 경우에 사용하는 키워드입니다. 찾아보니 이런 게시글이 보이는군요. 스택오버플로우

그리고 numeric reference는 캡쳐한 정규식을 다른 문자열로 치환할때 재이용하고 싶은 문자열 그룹에 접근하고자 할 때 사용하는 키워드입니다. 보통 괄호로 묶인 문자열 묶음의 순서대로 인덱스가 매겨집니다.

결론적으로 numeric reference를 적극 이용할 필요가 있는 정규식 치환 구문에서 사정에 의해서 캡쳐 그룹에 넣고 싶지 않은 문자열인데 괄호는 사용해야할때가 있기 때문에 ?: 같은 키워드가 개발된 것이라고 보시면 될것 같네요..

위의 스택오버플로우에서 사용하고 있는 예시를 풀어보자면 url에서 도메인 네임과 서브경로를 구분하고자 할때 url의 프로토콜은 신경쓰지 않고 싶을 수 있습니다. 그런경우 regex를 

(?:https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?

처럼 작성하시면 치환용 구문의 \1 에는 프로토콜(https?|ftp)이 아닌 도메인 네임([^/\r\n]+)이 들어가게 됩니다. 자세한 내용은 해당 스택오버플로우 게시글을 참고하시는게 좋을듯 하네요.

answered (89 point)
선택됨
와우 대단하십니다! 감사합니다.

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

96 질문
186 answers
194 댓글
211 users