No Story, No Ecstasy

Regex (정규표현식) vs contains / find / in 본문

Versus (vs) Series

Regex (정규표현식) vs contains / find / in

heave_17 2021. 1. 4. 23:05

정규표현식(Regular Expression; RegEx)

  - 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어를 의미한다

  - 그러나, RegEx를 통해 문자열을 찾는 속도는 C/C++의 string.find(), python의 ‘in operator보다 느리다.

  - 따라서, 분명한 목적(복잡한 문자열 or 반복 사용 or 그룹 저장 등)이 있을 때 활용하는 것이 좋다.

  - https://devopedia.org/regex-engines

 

Regex Engines

A regular expression describes a search pattern that can be applied on textual data to find matches. A regex is typically compiled to a form that can be executed efficiently on a computer. The actual search operation is performed by the regex engine, which

devopedia.org

 

 

그렇다면 정규표현식은 왜 속도가 느린걸까?

왜냐하면, compilation 단계와 cache 접근 단계를 거쳐야만 정규표현식을 활용할 수 있기 때문이다.

 

 

  * Compilation이 필요한 이유:

    - RegEx를 쓰는 주된 목적은 '재사용'하는 것이다.

    - 언제든 해당 정규표현식을 재사용하기 위해 메모리 상에 캐싱해둘 필요가 있다.

    - 즉, 처음 사용할 때는 메모리 상에 캐싱해두기 위한 컴파일 과정이 꼭 필요하다. 

  * 즉, RegEx를 활용하기 위해서는 cache 접근 단계도 필요하다.  

 

 

 

그럼에도 불구하고 당연히 큰 장점을 가진다.

 

1. 한 번의 컴파일 후 재사용 가능

"성능 향상을 위해 정규식 엔진은 애플리케이션 수준의 컴파일된 정규식 캐시를 유지 관리합니다. 캐시는 정적 메서드 호출에만 사용되는 정규식 패턴을 저장합니다. 인스턴스 메서드에 제공된 정규식 패턴은 캐시되지 않습니다. 따라서 사용할 때마다 식을 고급 바이트 코드로 다시 구문 분석할 필요가 없습니다."

https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/compilation-and-reuse-in-regular-expressions

 

정규식의 컴파일 및 다시 사용

정규식의 컴파일 및 다시 사용Compilation and Reuse in Regular Expressions 이 문서의 내용 --> 정규식 엔진이 식을 컴파일하는 방법과 정규식이 캐시되는 방식을 이해하면 정규식을 광범위하게 사용하는

docs.microsoft.com

 

2. 조건에 맞는 문자열 그룹화(캡쳐) 가능

  - "(subexpression)"과 같이 괄호를 활용하면, 문자열에서 원하는 패턴을 한 번에 캡쳐하여 확인할 수 있다.

  - 매우 긴 문자열에서 여러 substring을 추출해야 할 경우 매우 간결한 코드로 모두 찾아낼 수 있다. 

"여기서 subexpression 은 임의의 유효한 정규식 패턴입니다. 괄호를 사용하는 캡처는 정규식에서 여는 괄호의 순서에 따라 왼쪽에서 오른쪽으로 자동으로 번호(1부터 시작)가 매겨집니다. 번호가 0인 캡처는 전체 정규식 패턴에 의해 일치되는 텍스트입니다."

https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/grouping-constructs-in-regular-expressions

 

정규식의 그룹화 구문

.NET에서 그룹화 구문을 사용하는 방법을 알아봅니다. 그룹화 구문은 정규식의 하위 식을 나타내며 입력 문자열의 부분 문자열을 캡처합니다.

docs.microsoft.com

 

+다양한 RegEx 조건식의 Test가 가능한 링크

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

'Versus (vs) Series' 카테고리의 다른 글

Encoding Categorical Data  (0) 2021.03.12