정규식 성능에 대해 알아보자 |
http://egloos.zum.com/sword33/v/7294056
-
정규식은 어떻게 사용하느냐에 따라 성능이 엄청나게 요구될 수 있다.
다음 네가지를 유의하면 성능을 잘 뽑을 수 있다.
1. back tracking 최소화
2. 정확히 작성
3. 위치지정자 사용 (^, $)
4. 탐욕적 수량자보다는 게으른 수량자 사용
-
위 사이트는 정규식을 테스트해볼 수 있다.
이에 더해 정규식 판별 시간과 step수도 체크할 수 있고, debug 도 할 수 있어 아주 유용한 사이트.
-
back tracking 은 정규식이 왼쪽에서 오른쪽으로 탐색하는데, 100% 매칭되지 않으면 다시 돌아가서 다시 매칭을 시도하는 것을 이야기한다.
-
정규식은 target 이 되는 문서의 크기와 성능은 정비례한다고 볼 수 있다.
그래서 FlashText(https://github.com/vi3k6i5/flashtext) 라는 open source 가 있는데, 문서의 크기가 큰 경우 이 녀석으로 대체하면 좋다.
FlashText 에 대한 원리 설명은 여기(https://www.freecodecamp.org/news/regex-was-taking-5-days-flashtext-does-it-in-15-minutes-55f04411025f/)서 볼 수 있다.
이 글에서 Regexp 대신 FlashText 를 써야 하는 시간은 키워드가 500개 이상일 경우를 추천한다. (benchmark 결과 기반)
-
https://brunch.co.kr/@elijah17/3
위 글에 따르면 Java 1.8 에서의 Regex engine 의 성능은 상당히 좋아졌다고 한다.
'프로그래밍 놀이터 > Tips' 카테고리의 다른 글
[git] 수정 사항 되돌리기 ( stage to unstage, reset modifed ) (0) | 2020.03.03 |
---|---|
[regex] Possessive quantifier 에 대해 알아보자. (0) | 2020.02.29 |
[도서 정리] 13. Git 명령어 - ProGit (0) | 2020.01.18 |
[도서 정리] 12. 앱에 git 넣기 - ProGit (0) | 2020.01.17 |
[도서 정리] 11. 다양한 환경에서 Git 사용하기 - ProGit (0) | 2020.01.16 |
댓글