본문 바로가기
Programming/General

정규표현식 문제 - regexone.com

by NAMP 2019. 1. 31.


정규표현식 문제 - regexone.com

Problems

Problem 1: Matching a decimal numbers

언뜻보기에 숫자와 일치하는 정규식을 작성하는 것이 쉽지 않을까요?

우리는 어떤 숫자와도 일치하는 \d 특수 문자를 가지고 있으며 소수점과 일치해야합니다. 단순한 숫자의 경우, 맞을 수도 있지만 과학적 또는 재무적인 숫자로 작업 할 때는 종종 양수 및 음수, 유효 숫자, 지수 및 다른 표현 (예 : 수천 및 수백만을 구분하는 데 사용되는 쉼표)을 처리해야 합니다.

다음은 몇 가지 다른 형식의 숫자입니다. 점 메타 문자를 사용하여 임의의 문자가 아닌 소수점 자체를 어떻게 일치시켜야하는지 주목하십시오. 마지막 번호를 건너 뛰는 데 문제가 있는 경우 나머지 숫자와 비교하여 줄 번호가 어떻게 끝나는지 확인하십시오.

\d$

-?[\d\.,e]+$

Problem 2: Matching phone numbers

전화 번호 확인은 받는 입력 유형에 따라 다른 까다로운 작업입니다. 사람들이 전화 번호를 입력 할 때 지역 번호가 필요한 전화 번호나 외부 번호가 필요한 국제 전화 번호를 사용하면 정규 표현식을 복잡하게 만듭니다.(예를 들어 일부는 대시 또는 공백을 넣음)

다음은 실제 데이터를 사용할 때 발생할 수있는 몇 가지 전화 번호입니다. 숫자와 일치하는 단일 정규 표현식을 작성하고 적절한 지역 코드를 캡처합니다.

(\d{3})

Problem 3: Matching emails

HTML 양식을 처리 할 때 정규 표현식에 대해 양식 입력의 유효성을 검사하는 것이 유용한 경우가 많습니다. 특히 전자 메일은 사양의 복잡성으로 인해 정확하게 일치하기 어렵기 때문에 직접 작성하는 대신 내장된 언어 또는 프레임워크 기능을 사용하는 것이 좋습니다. 그러나 지금까지 배운 것을 사용하여 많은 수의 일반적인 전자 메일과 쉽게 일치하는 매우 견고한 정규식을 작성할 수 있습니다.

주의해야 할 점 중 하나는 많은 사람들이 plus 주소를 사용하는 것입니다. "name@gmail.com"으로 직접 연결되지만 추가 정보로 필터링 할 수 있는 "name+filter@gmail.com"과 같이 추가정보를 제공합니다. 또한 일부 도메인에는 둘 이상의 구성 요소가 있습니다. 예를 들어, "hellokitty.hk.com"에 도메인을 등록하고 "ilove@hellokitty.hk.com"형식의 전자 메일을 받을 수 있습니다. 전자 메일의 도메인 부분과 일치 할 때 주의하십시오.

다음은 몇 가지 일반적인 전자 메일입니다.이 예에서는 필터 (+ 문자 이상)와 도메인 (@ 문자 이상)을 제외하고 전자 메일의 이름을 캡처하려고합니다.

([^@+]+)

Problem 4: Matching HTML

HTML을 구문 분석하기 위한 강력한 방법을 찾고 있다면 정규식은 오늘날 인터넷에서 HTML 페이지의 취약성으로 인해 일반적으로 해답이 아닙니다. 예를 들어 끝 태그 누락, 불일치 태그, 속성 인용 부호 닫기 잊음과 같은 일반적인 실수는 모두 완벽하게 좋은 정규 표현식을 탈선 시킵니다. 대신 Beautiful Soup 또는 html5lib (Python) 또는 phpQuery (PHP)와 같은 라이브러리를 사용할 수 있습니다. 이 라이브러리는 HTML을 구문 분석 할 뿐만 아니라 DOM으로 쉽게 이동할 수 있습니다.

즉, 편집기에서 태그와 태그 컨텐츠를 신속하게 일치시키려는 경우가 종종 있으며, 입력을 보증 할 수 있는 경우 정규 표현식을 사용하여 이를 수행 할 수 있습니다. 아래 예제에서 볼 수 있듯이 따옴표 및 중첩 태그가 추가로 이스케이프 된 이상한 속성에 주의해야 할 수도 있습니다.

다음 예제에 대한 정규 표현식을 작성하십시오.

<(\w+)\b

Problem 5: Matching specific filenames

Linux 나 명령 행을 자주 사용하는 경우, 종종 파일 목록을 처리합니다. 대부분의 파일에는 확장명과 함께 파일 이름 구성 요소가 있지만 Linux에서는 파일 이름이 없는 숨김 파일을 갖는 것이 일반적입니다.

이 간단한 예제에서는 이미지 파일(현재 편집중인 이미지의 임시 파일 제외)에서 파일 이름과 확장명 유형을 추출합니다. 이미지 파일은 .jpg, .png 및 .gif로 정의됩니다.

(\w+)\.(jpg|png|gif)$

Problem 6: Trimming whitespace from start and end of line

경우에 따라 라인의 들여쓰기가 너무 많거나 충분하지 않은 잘못된 형식의 공백이 있는 로그 파일을 발견하게 됩니다. 이 문제를 해결하는 한 가지 방법은 여분의 공백없이 행의 내용을 추출하기 위해 편집기의 검색 대체 및 정규 표현식을 사용하는 것입니다.

이전에 hat ^ 및 달러 기호 $를 사용하여 전체 텍스트 줄을 일치시키는 방법을 살펴 보았습니다. 공백 문자 \s와 함께 사용하면 앞뒤 공백을 모두 건너 뛸 수 있습니다.

추가 공백없이 각 행의 내용을 캡처하는 간단한 정규 표현식을 작성하십시오.

^\s*(.*)$

Problem 7: Extracting information from a log file

이 예제에서는 Android adb 디버깅 세션의 실제 출력을 사용하려고 합니다. 목표는 스택 트레이스의 파일 이름, 메소드 이름 및 라인 번호를 추출하기 위해 지금까지 배웠던 정규 표현식 기술을 사용하는 것입니다 ("at package.class.methodname(filename:linenumber)"형식을 따릅니다).

행운을 빕니다!

\.(\w+)\((\w+\.\w+):(\d+)

Problem 8: Parsing and extracting data from a URL

네트워크를 통해 파일과 리소스를 사용하여 작업 할 때 URIURL을 자주 접할 수 있습니다.이 URI는 파싱되어 직접 작업 할 수 있습니다. 대부분의 표준 라이브러리에는 이러한 종류의 식별자를 구문 분석하고 구성하는 클래스가 있지만 로그나 더 큰 텍스트의 코퍼스와 일치해야하는 경우 정규 표현식을 사용하여 구조화 된 형식의 정보를 아주 쉽게 추출 할 수 있습니다.

URI 또는 ​​URI(Uniform Resource Identifier)는 일반적으로 아래에 강조 표시된 구성표, 호스트, 포트 (선택 사항) 및 리소스 경로로 일반적으로 구성된 리소스를 나타냅니다.

http://regexone.com:80/page

이 체계는 통신 프로토콜, 호스트 및 포트가 자원의 소스를 설명하며 전체 경로는 자원의 소스 위치를 설명합니다.

아래 연습에서 나열된 모든 리소스의 프로토콜, 호스트 및 포트를 추출하십시오.

(\w+)://([\w\.-]+):?(\d+)?


'Programming > General' 카테고리의 다른 글

정규표현식 연습 - regexone.com  (0) 2019.01.30
FLEX Link  (0) 2010.01.23

댓글