콘텐츠로 건너뛰기
Home » 정규식

정규식

Julia 정규식 다루기

Julia에서 정규식은 별도의 모듈을 반입하지 않고 사용할 수 있으며, 패턴 자체는 Base.RegExp 타입으로 표현된다. 정규식 패턴을 만들 때에는 r"..." 형태의 리터럴로 바로 정의할 수 있다. (대신, raw string문자열은 raw"..."이다.) 한번 생성한 Regexp 값은 .pattern 필드로 그 패턴을 다시 확인할 수 있다. 참고로 r" .... " 리터럴은 정규식 패턴을 좀 더 손쉽게 사용할 수 있게 하기 위해 백슬래시를 이스케이프해준다. 따라서 \d 등과 같은 이스케이프 문자 시퀀스에서 백슬래시는 두 번이 아니라 한 번만 쓰면 된다. (r"\d+")

더 보기 »Julia 정규식 다루기

네이버 검색에서 로또 당첨번호 파싱하기 – Swift + CommandLine

네이버 검색으로부터 로또 당첨 번호를 파싱하는 방법에 대해서 살펴보자. 기본적으로 이 작업을 수행하기 위해서는 두 가지 기술을 사용할 것이다. NSURLSession :  웹페이지 데이터를 받아와야 하기 때문에 네트워킹 API 를 사용해야 한다. NSRegularExpression : 받아온 데이터는 HTML 페이지의 소스 데이터이며, 여기서 로또 당첨번호의 내용을 추출하기 위해 간단한 정규식을 사용할 것이다. 아, 그리고 참고로 여기서 사용된 Swift 버전은 4.0이다. 준비 과정 네이버는 로또 당첨번호 검색에 대해서 일반적인 웹문서 결과가 아닌 별도로 디자인된 영역으로 당첨번호를 예쁘게 표시해주고 있다. 실제로 네이버에서 “로또 당첨번호”라는 키워드로… 더 보기 »네이버 검색에서 로또 당첨번호 파싱하기 – Swift + CommandLine

정규표현식의 개념과 기초 문법

작성한지 10년이 지났는데도 notepad++ 관련한 키워드로 꾸준히 유입이 발생하고 있고,  그게 정규표현식 관련한 글인데 별로 내용이 좋은 글이 아니다. (몇 가지 기초적인 문법만 요리책 식으로 나열해 놓은 거라…) 그래서 정규표현식의 개념과 기초 문법 그리고 몇 가지 이 블로그에서 다루는 언어들에서 정규표현식을 어떻게 쓰는지, 어떤 것들을 할 수 있는지 등에 대해서 알아볼 계획이다.

오늘은 그 첫 번째 순서로, 정규표현식의 개념과 가장 기초가 되는 패턴 문법에 대해서 살펴보려고 한다.

더 보기 »정규표현식의 개념과 기초 문법

NSRegularExpression : 정규식 사용하기 – Swift

Swift의 정규식

Swift는 언어 자체에서 정규식을 지원하지 않고 FoundationNSRegularExpression 클래스를 이용한다.

  1. NSRegulareExpressioninitthrows이기 때문에 try와 같이 사용되어야 한다.
  2. 매치 결과는 TextCheckingResult 클래스의 인스턴스를 얻게 된다. 이는 매치영역 및 영역 내 각 매치 그룹의 범위를 NSRange값으로 가지고 있다.
  3. 문제는 Swift 문자열의 부분문자열은 Index<String.Index>에 의해서 얻을 수 있지, NSRange를 이용할 수 없다. 따라서 이를 컨버팅하는 편의함수나 타입 확장을 이용해야 한다. (사실 이 부분은 Linux 버전의 Swift의 문제이다. Apple Swift에서는 Foundation/Cocoa를 임포트하게 되면  NSString의 API가 그대로 String으로도 노출되기 때문에 그대로 사용이 가능하다.)

더 보기 »NSRegularExpression : 정규식 사용하기 – Swift

Objective-C / Swift :: NSRegularExpression

NSRegularExpression Foundation은 유니코드 문자열에 대해서 정규식을 적용할 수 있는 NSRegularExpression 클래스를 제공한다. 이 클래스의 인스턴스는 컴파일된 정규식 패턴을 나타낸다. 여기서 사용되는 정규식 표현 패턴은 ICU의 안을 따르고 있다. (파이썬 정규식과 거의 유사하다.) http://userguide.icu-project.org/strings/regexp 기본적으로 정규식 객체는 자신의 패턴을 문자열에 적용해서 매치 결과들에 대해서 실행되는 블럭 이터레이터를 제공한다. 그 외에도 매치 결과를 배열로 리턴하거나, 매치의 수를 찾거나, 첫 매치를 찾는 등의 편의 메소드도 제공한다. 각각의 매치 결과는 NSTextCheckingResult 객체인데, 이는 전체 매치의 범위(NSRange) 및 개별 캡쳐 그룹의 범위값을 가지고 있다. 객체… 더 보기 »Objective-C / Swift :: NSRegularExpression

정규 표현식의 조건절

흔히 쓰이는 경우는 아니지만 정규 표현식에도 조건절을 사용할 수 있다. 참고로 모든 정규식 엔진이 조건절을 지원하는 것은 아니다. (javascript 정규식은 조건절을 지원하지 않는다.) 만약 현재 사용하는 편집기나 언어의 정규식 엔진에서 조건절을 지원한다면, 조건절을 사용해서 보다 정교한 매칭을 하는 것이 가능하다. 오늘은 정규표현식의 조건절 사용법에 대해 살펴보도록 하겠다.

더 보기 »정규 표현식의 조건절

정규식으로 짝수번째 숫자만 치환하기

코딩도장에서 흥미로운 문제를 하나 봤는데, 어떤 문자열에서 짝수번째로 등장한 숫자만 *로 치환하는 문제였다.문제의 출처가 정규식 관련 사이트인 것 같은데, 원본 주소는 링크가 깨진관계로… 예를 들자면 a1b2c3d4~e5f_6 과 같은 문자열이 있을 때 이중 숫자는 1, 2, 3, 4, 5, 6인데 그 중에서 짝수 번째로 등장하는 숫자만 *로 치환하는 것이다. 파이썬 구현은 매우 쉬운데…. def unvailEveryOtherDigits(str): s = [] occ = 0 for c in str: if c in "0123456789": c += 1 if c % 2 == 0: s.append('*') else: s.append(c)… 더 보기 »정규식으로 짝수번째 숫자만 치환하기

vim의 정규식 기호와 very magic 모드

vim의 문자열 검색, 치환 기능은 패턴 매칭에 의한 것이며, 이 패턴 매칭은 정규식에 기반을 두고 있다. 그런데 정규식 문법을 조금 알고 있는 상태에서 vim의 정규식을 사용하면 깊은 빡침을 느끼거나 심한 멀미를 겪을 수 있다. 왜냐하면 정규식은 딱히 하나의 정해진 표준도 없거니와 기능과 편의를 위해서 여러 갈래로 나뉘어져 있고 vim에서는 상황에 따라서 서로 다른 기준을 사용해서 패턴을 파싱하기 때문이다. 예를 하나 들어보자.

(this)isnot{this}nor[this]

이런 문자열이 있다고 할 때, 괄호들을 포함한 this를 검색, 즉 (this), {this}, [this]를 검색하려면 다음의 패턴을 사용한다.더 보기 »vim의 정규식 기호와 very magic 모드