문자열의 원하는 특정부분만 탐색할 수 있는 방법이 있다. 그것은 전방탐색, 후방탐색 등이다.
위 표를 참고해서 응용해서 현업에서 필요할 때 사용하기 위해 작성했다.
전방탐색만 정규식을 해석하겠다.
전방탐색
① 예시 → "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이 문자이기 때문에 별표(*)로 치환해주는 것이다.
⑤ 그림으로 표현한 치환 과정
3~5 생략
7~9번은 4번 반복하지 않았기 때문에 치환하지 않는다.
해당 정규식을 이해하기 위해서 아래 url에서 표를 한 번 읽고 이해하는 걸 추천한다.
'자기계발 > 알고리즘, 자료구조' 카테고리의 다른 글
String ] 숫자만 입력해서 특정 문자를 반복하는 방법 (0) | 2021.10.15 |
---|---|
자료구조 ] 배열을 리스트로 변환하는 방법 (0) | 2021.10.15 |
정규식 ] String을 다룰 때 유용한 정규표현식 정리 (0) | 2021.10.13 |
자료구조 ] Vector, ArrayList, LinkedList 의 차이 정리 (0) | 2021.10.12 |
아스키코드표 ] java에서 charAt() 함수 사용시 필수 (0) | 2021.10.11 |