작은 메모장

정규표현식 - 정규표현식 기본 실습 본문

KISA 사이버 보안 훈련/YARA 정규표현식 활용

정규표현식 - 정규표현식 기본 실습

으앙내눈 2023. 6. 24. 16:09

배운 정규표현식을 사용하여 다양한 필터링을 진행해보자

 

 

첫 번째 문제

단순하게 생각하면, 숫자의 범위인 0~9까지 탐지하도록 지정해주면 된다.

때문에, /[0-9]/g가 가장 기초적인 해답이 될 것이다.

하지만, 이보다 더 경량화시킬 수 있는 방법이 있다.

바로, /\d/g로, \d는 숫자만을 탐지하는 정규표현식이다.

 

 

두 번째 문제

위와 동일한 방법으로, 영문, 숫자, _를 제외한 문자를 입력하는 식을 만들면 된다.

따라서, /[^A-z0-9]/g가 기초적인 해답이 된다.

하지만, 더 간단한 방법이 존재한다.

앞서 공부했던 내용 중, 단어만을 제외하고 탐지하는 정규표현식이 존재했다.

이를 사용하면, /\W/g가 조건에 부합하는 정규표현식이 될 것이다.

 

 

세 번째 문제

이 문제는 공백을 제외하는 조건이 걸려있다.

단순하게 받아들이면, 공백을 빼고 전부 작성하는 정규표현식을 작성하면 된다.

/[A-z0-9/:\.]/g가 그 답이 될 것이다.

하지만, 위 정규표현식은 너무 길다.

이에 대체할 수 있는 정규 표현식을 찾으면, /\S/g라는 정규표현식으로 줄일 수 있다.

 

 

네 번째 문제

각 단어의 차이점은 끝나는 단어가 모두 다르다는 점이다.

인식해야하는 단어의 끝나는 부분은, 없거나, s로만 끝나야한다는 점을 주목할 수 있다.

그렇다면, s는 있어도, 없어도 좋지만, es는 제외하면 원하는 결과를 얻을 수 있다.

/balls?[^es]/g를 이용하여 탐지할 수 있다.

다른 방법을 생각해보자. 플래그 사용법에서, 각 라인을 별도로 보게 하는 기호가 있었다.(/m)

상기 서술했듯, s로 끝나도 상관없지만, es로 끝나면 안된다는 조건이 이 문제의 핵심이었다.

여러 정규표현식중에서, 단어의 끝부분만 인식하는 앵커 표현식이 있었다.($)

이를 이용하면, /balls?$/g이라는 정규표현식으로 탐지 가능하다.

 

 

다섯 번째 문제

ce로 끝나는 단어를 전부 인식해야하므로, 기본적으로 ce를 포함하고 있어야한다. (*ce)

ce로 끝나야 하므로, ce뒤에는 어떠한 문자가 존재하면 안된다. 즉, ce로 단어가 끝나야 한다. (\b)

ce앞에는 공백을 제외한 어떠한 단어가 와도 된다. 즉, 공백 빼고 모든 문자가 있어도 되고, 없어도 된다. (\S)

이를 종합적으로 보면, /\S*ce\b/g가 맞는 정규표현식이 된다.

 

 

여섯 번째 문제

기본적으로 S가 2개 이상 있어야 하므로, SS를 포함하고 있어야한다. (SS)

불만족도에 해당하는 문자들을 자세히 보면, S로 이루어진 문자열은 전부 ]로 끝난다.

즉, S가 2개 이상 존재하는 문장들은 전부 1개의 문자가 존재한다. (SS.)

문장 전체를 인식해야하므로, SS앞에는 어떠한 문자든 1개 이상 존재해도 된다. (.+SS)

이를 종합적으로 보면, /.+SS./g로 탐지 가능하다.

수량자를 사용하여 줄일 수 있다.

SS라고 표현하는 것보단, S가 2개 이상 있다라고 표현하면 경량화가 된다. (S{2, })

즉, /.+S{2,}./g로 정규표현식을 만들 수 있다.

 

 

일곱 번째 문제

중간 글자를 기준으로 앞 뒤가 동일한 단어를 인식하는 조건의 문제다.

일단 첫 문자는 아무거나 존재할 수 있다. ( (.) )

조건에 맞는 단어들을 보면, 토마토, 기러기, 오디오가 해당된다.

이에 두 번째 글자는, 마, 러, 디 중에 하나가 올 것이다. ( [마|러|디] )

마지막 글자는 첫 문자와 동일한 글자가 존재해야 한다. ( \1 )

이를 종합적으로 보면, /(.)[마|러|디]\1/g로 탐지 가능하다.

그런데, 이는 중간글자가 마, 러, 디인 경우에만 탐지가 가능하다.

따라서 아무 글자나 오게 변경하면 앞 뒤가 동일한 단어를 인식할 수 있다. ( \S )

/(.)\S\1/g의 정규표현식으로 나타낼 수 있다.