본문 바로가기

기타/Regular expression

[Regex] RegexOne 사이트 문제 풀이와 학습(2)

 

https://moonsupport.tistory.com/173 의 다음편

 

[Regex] RegexOne 사이트 문제 풀이와 학습(1)

https://regexone.com/ RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs Regular expressions are extremely useful in extracting information from text such as code, log fi..

moonsupport.tistory.com

Lesson 11

Task Text Capture Groups
Capture file_record_transcript.pdf file_record_transcript
Capture file_07241999.pdf file_07241999
Skip testfile_fake.pdf.tmp  

답 : ([a-z+\_?].+)\.pdf$

( )는 안의 내용을 하나의 묶음(Capture Groups)으로 만든다. 

< (소문자 이후, _ 이후, 어떠한 문자들 이후) .pdf로 끝나는 문자 >
< (소문자 이후, _ 이후, 숫자 이후) .pdf로 끝나는 문자 >
< .pdf 로 끝나야 하기 때문에, tesfile_fake.pdf 이후의 문자는 unmatch >

Lesson 12

Task Text Capture Groups
Capture Jan 1987 [Jan 1987] [1987]
Capture May 1969 [May 1969] [1969]
Capture Aug 2011 [Aug 2011] [2011]

답 : ([A-z\s]+(\d+))

괄호는 괄호를 품을 수 있음

 

< 설명 생략 >
< 설명 생략 >

Lesson 13

Task Text Capture Groups
Capture 1280x720 1280 720
Capture 1920x1600 1920 1600
Capture 1024x768 1024 768

답 :  (.+)x(.+)

설명 생략

< 설명 생략 >

Lesson 14

Task Text
Match I love cats
Match I love dogs
Skip I love logs
Skip I love cogs

답 : cat|dog

| (or 기호)를 넣으면 두 문자중 하나를 포함한다.

 

< cat 혹은 dog >
< 문자를 받다 cat혹은 dog를 포함한 문자를 포함한다. >

Lesson 15

Task Text
Match The quick brown fox jumps over the lazy dog.
Match There were 614 instances of students getting 90.0% or above.
Match The FCC had to censor the network for saying &$#*@!.

15번은 정답이 따로 없기 때문에, 아래 예시를 보며 공부하길 바란다.

\w는 [A-Za-z0-9]와 같이 모든 문자와 숫자를 의미한다.

\b는 공백과 문자사이, 문자와 공백사이의 위치를 의미한다.

< 아래 설명 >

첫번째 줄을 예시로 들면

|The| |quick| |brown| |fox| |jumps| |over| |the| |lazy| |dog|.

빨간 막대는 \b로 선택된 자리

초록 칸은 .(모든 문자)를 의미한다.

\w(A-z0-9)와\s(white Space)가 부정인 것

헷갈리지 말아야 할 것은

[]안에 ^가 들어갈 수 있는 자리는 첫번째 자리뿐이며,

^가 들어가면 모든 조건이 부정이 된다.

 

Problem1 

Task Text
Match 3.14529
Match -255.34
Match 128
Match 1.9e10
Match 123,340.00
Skip 720p

정답 : .*[^\D]$

맨뒤의 문자가 숫자인 경우를 찾는다.

Problem 2

Task Text Capture Groups
Capture 415-555-1234 415
Capture 650-555-2345 650
Capture (416)555-3456 416
Capture 202 555 4567 202
Capture 4035555678 403
Capture 1 416 555 9292 416

정답 : (\d{3})

전화번호 앞자리를 찾는데 사용한다고 한다.

Task Text Capture Groups
Capture tom@hogwarts.com tom
Capture tom.riddle@hogwarts.com tom.riddle
Capture tom.riddle+regexone@hogwarts.com tom.riddle
Capture tom@hogwarts.eu.com tom
Capture potter@hogwarts.com potter
Capture harry@hogwarts.com harry
Capture hermione+regexone@hogwarts.com hermione

정답 : ([\w]+\.*[A-z]*) 혹은 ([A-z.]*)

<정답>
< 아이디만 찾는 법 >

Problem 4

Task Text Capture Groups
Capture <a>This is a link</a> a
Capture <a href='https://regexone.com'>Link a
Capture <div class='test_style'>Test</div> div
Capture <div>Hello <span>world</span></div> div

정답 : <(\w*)

< HTML 태그 찾는 법 >

하나씩 따져보자

< = <

(/)? = / 가 1개 있거나 없거나 (닫히는 태그를 위해)

([a-zA-z]*) = 태그명

(

 \s = 공백

[a-Z]* = HTML속성

= = 속성에 값을 할당하기 위한 equal

[^>]* = 닫히는 태그가 아닌 값들을 전부 받음(속성 할당 값)

)? = (속성을 할당하는 태그를 위한 코드)

(\s)* = 태그의 불필요한 공백을 잡기 위함

(/)? = (열자마자 닫히는 태그를 잡기 위한 코드)

 

< HTML 태그 찾는법 2 >

안에서 부터 하나씩 살펴보자

[^>]+ = 닫히는 태그가 아닌 값들을 전부 받음(속성 할당 값)

<([^>]+)> 그 값들 중 < > 에 둘러쌓인 값

하지만 < 한글 > 과 같은 값도 들어가게 된다.

< 특정 태그 찾기 > 

Problem 5

Task Text Capture Groups
Skip .bash_profile  
Skip workspace.doc  
Capture img0912.jpg [img0912] [jpg]
Capture updated_img0912.png [updated_img0912] [png]
Skip documentation.html  
Capture favicon.gif [favicon] [gif]
Skip img0912.jpg.tmp  
Skip access.lock  

답 : (\w*).(jpg)$|(\w*).(png)$|(\w*).(gif)$

< 이미지 확장자가 모두 g가 들어간다는 점을 노린 답 >

Task Text Capture Groups
Capture             The quick brown fox... The quick brown fox...
Capture jumps over the lazy dog. jumps over the lazy dog.

답 : ([^\s].*)$

 

Problem 6

Task Text Capture Groups
Skip W/dalvikvm( 1553): threadid=1: uncaught exception  
Skip E/( 1553): FATAL EXCEPTION: main  
Skip E/( 1553): java.lang.StringIndexOutOfBoundsException  
Capture E/( 1553): at widget.List.makeView(ListView.java:1727) [makeViewList] [View.java] [1727]
Capture E/( 1553): at widget.List.fillDown(ListView.java:652) [fillDown] [ListView.java] [652]
Capture E/( 1553): at widget.List.fillFrom(ListView.java:709) [fillFrom] [ListView.java] [709]

답 : \.([^.]*)\(([^\(]*):(\d*)\)$

< 답에 .*를 씌웠다. >

Problem 8

Task Text Capture Groups
Capture ftp://file_server.com:21/top_secret/life_changing_plans.pdf ftpfile_server.com21
Capture https://regexone.com/lesson/introduction#section httpsregexone.com
Capture file://localhost:4040/zip_file file localhost4040
Capture https://s3cur3-server.com:9999/ httpss3cur3-server.com9999
Capture market://search/angry%20birds market search

정답 : ([A-z]*):\/\/(.*com|[A-z]*|):?(\d*)?

([A-z]*) 알파벳

:\/\/ 주소 형식

(.*com|[A-z]*|) .com으로 끝나거나, 그냥 끝남 (.*com은 없어도 무방하다)

:?(\d*)? 포트 번호가 있다면 처리한다.

 

끝이다아아아아아아

'기타 > Regular expression' 카테고리의 다른 글

[Regex] RegexOne 사이트 문제 풀이와 학습(1)  (0) 2019.04.10