참조
C# Regex Docs
Regular Expression Language - Quick Reference
정규식 패턴 매칭 테스트 사이트
// 테스트 Text
*서식 테스트* 서식 테스트*
_서식 테스트_
~서식 테스트~
**서식 테스트** 서식 테스트*
Regex boldPattern = new ((\*\*?)(?![\s\*])((?:[\s*]*(?:[\*]|[^\s*]))+?)\1);
[패턴 매칭 결과 이미지]
// Input
*서식 테스트* 서식 테스트*
_서식 테스트_*
~서식 테스트~
**서식 테스트** 서식 테스트*
// Expected Output
서식 테스트 서식 테스트*
_서식 테스트_*
~서식 테스트~
**서식 테스트** 서식 테스트*
정규식에 대한 이해가 없으니까… 문서를 보고 직접 작성하기가 힘들고
검색해서 코드 퍼다 나를려고하니… 디테일이 부족하네요.
++
[이런 문자들이 어떤 역할을 하는지 이해가 안되는 상황입니다.]
2개의 좋아요
rkttu
#2
정규표현식은 작성할때나 읽을때 패턴을 확인해서 다음에 올 문자가 무엇인지에따라 취할 행동을 기술하는 도메인 언어입니다.
문자를 하나하나 비교하지 않고, 특정한 패턴에 해당되는지 여부를 보는게 핵심인데요, 예를 들어 a-z는 소문자 알파벳인지를 한번에 지정하는 표현식인데, 어차피 유니코드든 ascii이든 a부터 z는 순서가 정해진 값들이리 마치 숫자 범위처럼 기술한겁니다.
다른 기호들도 그런 형태로 읽으실수 있고, 이것들을 연속해서 쓰는 식으로 다음에 올 문자가 무슨 형태여야하는가를 식으로 요구하는것입니다.
regexlib.com의 테스터 기능을 이용해서 내가 원하는 표현식을 연습해보면 금방 감을 잡으실 수 있을겁니다.
그리고 실무에서는 그룹 매칭을 많이 이용합니다. lexical analyzer가 필요하기 바로 직전까지의 복잡한 연산은 그룹 매칭으로 커버가 되고, 이걸 넘으면 본격적인 문법 분석기나 컴파일러 개발 착수로 진입하게 됩니다.
2개의 좋아요
nyjin
#4
기본적으로 정규식도 테스트를 많이 해보시면 익숙해집니다.
공유해주신 사이트는 저도 애용하는 사이트인데 문자에 대한 설명과 매칭되는 과정을 잘 설명해주고, 패턴 문자에 대한 디버깅 가능합니다.
그리고 백트래킹을 잘 쓰면 정규식을 좀더 고급지게 사용할 수 있습니다.
궁금해 하시는 내용들을 보면 다음과 같습니다.
- .(콤마): 아무 문자나 하나(only one) 가능하다는 의미입니다.
-
a.c → aac, abc, acc, adc 등을 말합니다.
-
\p{Lu}, \P{Lu} → 정규식에서 역슬래시를 넣은 예약어가 있는데요. \w, \d, \s 등입니다. 특별한 의미를 가진다는 뜻입니다.
- w는 word, d는 digit, s는 space 입니다. 예약어에 대문자를 더하면 그러니까 W, D, S는 not을 의미 합니다. not word, not digit, not space
- 간단하게 말씀드리면 \w 면 문자 한글자를 말합니다. \W는 문자가 아닌 한글자를 말합니다.
- 다시 돌아와서 \p는 {} 로 묶인 예약어의 문자셋을 나타냅니다.(유니코드를 쓰지 않으신다면 별로 쓰실일이 없으실겁니다.)
- \p{Lu}는 L은 letter고 u는 uppercase를 나타냅니다. 그래서 대문자를 말하죠 ^^;
- \P 대문자는 아까 말씀드린 것처럼 not을 의미합니다.
- 괄호 안에 들어올수 있는 예약어들 공유 드립니다.
유니코드: 'u' 플래그와 \p{...} 클래스
5개의 좋아요