728x90

문자열의 원하는 특정부분만 탐색할 수 있는 방법이 있다. 그것은 전방탐색, 후방탐색 등이다.

 

정규식 탐색에 대한 사용예시 표.

위 표를 참고해서 응용해서 현업에서 필요할 때 사용하기 위해 작성했다.

 

전방탐색만 정규식을 해석하겠다.

 

전방탐색

① 예시 → "123456789".replaceAll(".(?=.{4})", "*");      //result : "*****6789"

  - ".(?=.{4})" 이 정규식을 이해하기 위해서는 쪼개서 분석해서 이해할 필요가 있다.

② 쪼갠 예시 .{4} → "11112".replaceAll(".{4}","*")      // result : "*2"

  - 예시를 보면 문자 "11112"를 4번 반복한 1111를 문자 별표(*)로 치환한다. 이후 4번 반복하는 문자가 없기때문에 "*2"의 결과를 출력하는 것이다.

③ 쪼갠 예시 (?=.{4}) → "11112".replaceAll("(?=.{4})","*")      //result : *1*1112"

  - 문자 "11112"는 그대로 있고 앞에 별표(*)가 있다. 이것은 전방탐색의 특징인 '소비하지않는다'이기 때문에

    표현식(.{4})으로 탐색한 4번 반복한 문자는 제외한 앞에 별표(*)를 붙이는 것이다.

④ 이제 본론으로 돌아가면 '소비하지 않는다'의 특징을 가진 전방탐색 표현식 앞에 대상을 붙여주게되면

    표현식(.{4})으로 탐색한 4번 반복한 문자가 대상인 경우 치환해주게 되는 것이다.

즉, 1234는 4번 반복했으나 자신을 제외한 앞단에 문자가 없기때문에 *치환이 안되는 것이며, 2345는 4번 반복한 앞에 1이 문자이기 때문에 별표(*)로 치환해주는 것이다.

 

⑤ 그림으로 표현한 치환 과정

1번
2번

3~5 생략


6번

7~9번은 4번 반복하지 않았기 때문에 치환하지 않는다.

 

해당 정규식을 이해하기 위해서 아래 url에서 표를 한 번 읽고 이해하는 걸 추천한다.

https://jfbta.tistory.com/88

 

정규식 ] String을 다룰 때 유용한 정규표현식 정리

현업 또는 알고리즘 문제를 풀 때 잘 익혀두면 유용하게 사용할 수 있다. 정규표현식을 사용하는 이점은 코드가 간결해져서 가독성이 좋다. ※ 꿀팁  ⓐ DOT( . )을 표현식이 아닌 문자로 사용하

jfbta.tistory.com

 

728x90
TOP