Capturing Group 사용, 또 한가지. Regex

오랜 만에 다시 Regex 한방.

아까 글을 쓰다가, 제목을 크기를 키워주고 싶었다. HTML 을 좀 더 제대로 하고, CSS 를 잘 쓴다면 더 쉬울 수도 있겠으나 그렇진 못한 관계로 그냥 대충 우격다짐으로 할 수 밖에 없었다.

주어진 상황은 이렇다.
  • 찾기 : <strong>11. Mpd 를 위한 nginx 설정.</strong>
  • 바꾸기 : <span style="font-size:120%;"><strong>11. Mpd 를 위한 nginx 설정.</strong></span>
이런 것이 10개가 넘어가면 하나씩 찾아가며 바꾸기는 귀찮게 마련이다.

자.. 어떻게 할 수 있을까.
처음에 생각한 건 Look Around 였다. ?= 를 사용해서 어떻게 하면 되지 않을까..
그런데 좀 더 생각해보니, 여기서 필요한 건 strong tag 로 둘러싸인 부분이므로, <strong> 으로 시작해서 </strong> 으로 끝나는 걸 모두 찾으면 되고, 그 전체에 앞 뒤로 span tag 를 넣어주면 되는 것이다.

따라서, 일단 strong 태그를 찾고, 그 다음은 바로 뒤에 숫자가 나오는 것들, 그리고 그 문장 끝이 strong 으로 끝나는 것을 찾으면 된다.

결과는 이렇다.
  • <strong>\d.*</strong>
이젠 이것을 바꿔주면 되는데.. 바꾸기 위해선 '찾은 것' 그대로를 넣어주고, 앞 뒤로 새 것들을 넣어줘야 한다. '찾은 것 그대로'를 반복하려면, 필요한 것이 바로 바로 Capturing Group.

하여, 이렇게 해주면 된다.
  • 찾기 : (<strong>\d.*</strong>)
  • 바꾸기 : <span style="font-size:120%;">$1</span>
어려울 것 하나도 없다. 그냥 괄호로 감싸주면 끝.

그런데.. 만약 strong tag 는 날려버리고 span 으로만 해주고 싶다면 어떻게 해야 되나?
다시 말해서,
  • 찾기 : <strong>8. nfs 설치</strong>
  • 바꾸기 : <span style="font-size:120%;">8. nfs 설치</span>
물론, <strong> 과 </strong> 을 각각 따로 찾은 후 <span style="font-size:120%;"> 과 </span> 으로 바꿔줘도 되긴 되겠지만.. 그렇게 되면 다른 strong tag 에까지 영향을 미치게 된다.

그럴 땐 이렇게 Capturing Group 을 나눠주면 되겠다.
  • 찾기 : (<strong>)(\d.*)(</strong>)
  • 바꾸기 : <span style="font-size:120%;">$2</span>
찾으려는 내용이 두번째 괄호 안에 있으므로 $2 가 된다.

그냥 '찾기'만을 하려면 Regex 가 꽤 복잡해질 수 있다. 특히 Look Around 가 나오고, Zero Assertion 이 어쩌고 저쩌고 하면 헷갈리게 된다.
그러나, '바꾸기'위해 '찾기'를 한다면, 괄호를 사용해서 Capturing Group 을 이용한다면, 보다 쉽고 빠르게 결과를 얻을 수 있다.

덧글

댓글 입력 영역

Google Analyze


LastFm

MathJax