[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 모든 문자를 한꺼번에 인식 처음 닉네임을 매칭하는 부분에는 .+ 표현이 사용되었습니다 여기서 .은 어떤 문자든 매칭을 시켜주는 표현이고 +는 1개 이상의 문자를 매칭시켜줍니다
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ [ ] 속의 모든 문자를 캡쳐 그룹에 포함 ( )는 캡쳐 그룹 표현으로 나중에 매칭된 데이터 중 일부를 따로 뽑아내고 싶을때 캡쳐 그룹을 사용합니다 그래서 \[(.+)\]는 [ ]속에 있는 모든 글자를 하나의 그룹으로 묶는 표현입니다
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 맨 처음 나온 [ ] 속의 모든 문자를 캡쳐 그룹에 포함 그래서 이 표현식은 위와 같이 처음 나오는 [ ] 속의 모든 문자를 매칭시키게 되므로 닉네임을 매칭하는 표현식이 됩니다
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 오전 또는 오후 [ ] 표현은 괄호 안에 들어간 문자중 한개라도 같다면 매칭 시켜주는 표현식입니다 그래서 위 식으로 오전/오후가 모두 매칭이 됩니다
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 1~2자리 숫자 + 문자 : + 2자리 숫자 = 시간 위 데이터를 보면 오후 7시에 Leading-Zero가 없는 것을 알 수 있습니다. 그래서 시간 부분은 1~2자리의 숫자로, 분은 2자리 고정이라는걸 알 수 있죠
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 1~2자리 숫자 + 문자 : + 2자리 숫자 = 시간 그래서 이와 같은 식으로 오전/오후 XX:XX 꼴의 시간을 매칭할 수 있습니다
[오후 7:05] 절름발이야 [코아노] [오후 7:05] 서라 만나면 찢어발긴다 ^\[(.+)\] \[(오[전후] \d{1,2}:\d{2})\] (.+)$ 모든 문자 처리 [닉네임] [시간] 다음은 채팅 메시지이므로 처음과 같이 .+ 표현으로 남은 모든 문자를 처리하여 채팅 메시지를 매칭시켜주면 끝납니다.
java.util.regex.*; Python import re C# using System.Text.RegularExpressions; JS new RegExp(‘Pattern’), /pattern/ 정규 표현식은 거의 모든 언어와 텍스트 에디터에서 사용할 수 있습니다 단, C++의 경우는 C++ 11 표준부터 지원하므로 유의해야합니다