본문 바로가기
프로그래밍 놀이터/Tips

[regex] 정규식 성능에 대해 알아보자

by 돼지왕왕돼지 2020. 2. 28.

정규식 성능에 대해 알아보자



http://egloos.zum.com/sword33/v/7294056


-

정규식은 어떻게 사용하느냐에 따라 성능이 엄청나게 요구될 수 있다.

다음 네가지를 유의하면 성능을 잘 뽑을 수 있다.


1. back tracking 최소화

2. 정확히 작성

3. 위치지정자 사용 (^, $)

4. 탐욕적 수량자보다는 게으른 수량자 사용



-

https://regex101.com

위 사이트는 정규식을 테스트해볼 수 있다.

이에 더해 정규식 판별 시간과 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 의 성능은 상당히 좋아졌다고 한다.





댓글0