본문으로 건너뛰기

"regexp" 태그로 연결된 1개 게시물개의 게시물이 있습니다.

모든 태그 보기

· 약 3분
Green

정규표현식에서 앞쪽 또는 뒷쪽의 조건에 따라서 검색 방식을 다르게 할 수 있는데, 이걸 매번 까먹네요😥

1. Positive Lookahead

regexp1(?=regexp2)
"save me, save me. I need your love before I fall, fall."
.replaceAll("(save me|fall)(?=\.)", "(x2)");

결과는 save me, (x2). I need your love before I fall, (x2). 이렇습니다.
즉, regexp2 가 정방향(읽어나가는 방향)에 있을 경우 regexp1 이 검색 됩니다.

2. Nagative Lookahead

regexp1(?!regexp2)
"save me, save me. I need your love before I fall, fall."
.replaceAll("(save me|fall)(?!\.)", "(..)");

결과는 (...), save me. I need your love before I (...), fall. 이렇습니다. 즉, regexp2 가 정방향(읽어나가는 방향)에 없을 경우 regexp1 이 검색 됩니다.

3. Positive Lookbehind

(?<=regexp1)regexp2
"save me, save me. I need your love before I fall, fall."
.replaceAll("(?<=,)\s*(save me|fall)", "(x2)");

결과는 save me, (x2). I need your love before I fall, (x2). 이렇습니다.
즉, regexp1 가 역방향(읽어나가는 반대 방향)에 있을 경우 regexp2 이 검색 됩니다.

4. Nagative Lookbehind

(?<!regexp1)regexp2
"save me, save me. I need your love before I fall, fall."
.replaceAll("(?<!(,[ ]))(save me|fall)", "(..)");

결과는 save me, (x2). I need your love before I fall, (x2). 이렇습니다.
즉, regexp1 가 역방향(읽어나가는 반대 방향)에 있을 경우 regexp2 이 검색 됩니다.

conclusion

정리 한다고 했는데, 더 헷갈리게 한건 아닌지 싶군요.
그리고 IntelliJ 나 Eclipse 를 쓰신다면 RegexpTester(http://myregexp.com) 라는 플러그인을 사용해보면 정규표현식 작성에 도움이 될까 싶어요.

정규표현식 자체가 원래부터 많은 규칙들이 얽힌거니까, 우리... 잘 못해도 자신감 잃지 말아요 🤟