안녕하세요. 이번 시간에는 kibana에서 regex로 filter를 거는 방법을 알아보겠습니다. 8.5.0 버전 기준으로 설명합니다. 사실 간단한 정도의 regex는 지원이 되니, 이용해 보시는 것도 나쁘지 않겠습니다. 어떤 것을 지원하는지는 문서 참고하시면 되겠습니다. 저번 시간에 KQL을 이용해서 filter를 걸었습니다. 그런데, 문제는 이것이 regex를 지원하지 않습니다. 그래서, 이메일 패턴이 있을 때, @ 앞에 붙은 아이디가 7자 이상인 email이 있는 문서에 대해서 찾지 못합니다. 이것을, Elasticsearch Query DSL이 가능하게 해 줍니다. eCommerce 샘플 데이터를 보겠습니다. email의 type을 확인해 보니 k라고 되어 있습니다. Keyword를 의미합니다. ..
regex 검색 결과
정규표현식 중에 (?=...), (?!...)와 같이 쓰는 패턴이 있습니다. 정규표현식에서 lookahead라고 하는데요. 간단하게 알아보겠습니다. 이 패턴으로 어떻게 기준이 잡히는지부터 보는 것이 빠르겠네요. (?=foo)f 패턴을 보겠습니다. foofoofoofoofoof를 입력했을 때, 패턴이 어떻게 매치되는지부터 보겠습니다. 1번째부터 5번째 f까지 잡히고, 6번째 f는 match가 되지 않음을 알 수 있어요. 왜? (?=foo)만 입력했을 때 어떻게 기준이 잡히나 보겠습니다. 1번째 f 앞에 기준선이 있습니다. 2, 3, 4, 5번째 f 앞에도 기준선이 있습니다. 그런데, 6번째 f 앞에는 없습니다. 어떤 기준으로 잡히는 것일까요? foo라는 패턴 앞에 기준선이 붙어요. 1, 2, 3, 4, 5..
regex에서 lazy quantifier가 어떻게 동작하는지 간단하게 알아봅시다. 먼저 R{2,} 뒤에 ?를 붙였습니다. 이 때 ?는 lazy quantifier 역할을 합니다. match as few character as possible이라 되어 있는데요. 가능한 적은 문자를 match 한다고 되어 있습니다. greedy 속성과는 정반대임을 알 수 있습니다. RRRRR, RR이 있는데요. R{2,}에 매치되는데, 가능한 적은 문자로 매치되는 패턴은 어떤 것인가요? RRRRR에서는 RR입니다. 그 다음에 RRR에서 RR이 또 매치가 됩니다. 그렇기 때문에, RRRRR에서는 2개가 match 되고, RRR에서는 RR 하나만 매치가 됩니다. 이는, 패턴 R{2,}와는 다른데요. 요래 입력하고 패턴을 찾아..
문자열을 처리할 때 regex는 생각보다 많이 쓰게 됩니다. 파이썬에서는 re를 제공하고 있는데요. match와 fullmatch에 대해서 간단하게 알아보겠습니다. 먼저 match를 보도록 하겠습니다. match는 target이 해당 패턴으로 시작하는지를 검사해서, 그렇다면 Match object를 돌려줍니다. 예를 들자면, 패턴 'a'로 시작하는 문자열 'abc'는 참입니다. 그런데 패턴 'b'로 시작하는 문자열 'abc'는 거짓입니다. 따라서, 위 프로그램의 결과는 1번째는 Match 되는 오브젝트가 떨어질 것이고, 2번째는 None이 나올 겁니다. 정말 그런가요? 네. 그래서, 어떠한 문자가 특정한 패턴으로 시작하는지 판단하려면 re의 match를 이용하면 됩니다. fullmatch는 문자열 전체가..
최근댓글