본문 바로가기

프로그래밍

C# 4.0 정규표현식 모음


- 테스트 환경 : C# 4.0 Winform Regex 테스트 프로그램 만들어 검증.

- 해당 케이스를 테스트할 샘플 문자열 필요, 적절히 만들어서 케이스별로 확인.


----------------------------------------------------------------------

-- 각종 주석 찾기

-- HTML / XML 주석

\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>



-- Source Code 주석

-- 멀티라인 주석 /* .... */

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/


-- 멀티라인 + 싱글라인 /* .... */ + // ...

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)


-- Oracle Comment

/\*(?>(?:(?!\*/|/\*).)*)(?>(?:/\*(?>(?:(?!\*/|/\*).)*)\*/(?>(?:(?!\*/|/\*).)*))*).*?\*/|--.*?\r?[\n]

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(--.*)


-- Oracle Query 에서 Table Name 추출

(from|join)\s+(?<table>\S+)


-- SQL 바인딩 변수 찾기

(?<=[\:])\w+(?=\s+)  # ':ANY_PARAMETER' 같은 바인딩 변수에서 이름만 리턴

(?<!\w)@\w+|(?<!\w):\w+|\?


-- 한글 찾기

\b[가-힣]+\b

[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]+

[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AF]+?


-- 한자 찾기

[\u4E00-\u9FA5]|[\uF900-\uFA2D]+

\b[一-龥]+\b

\b([\u4E00-\u9FFF]+)\b

[\u31C0-\u31EF\u3200-\u32FF\u3400-\u4DBF\u4E00-\u9FBF\uF900-\uFAFF\u20000-\u2A6DF\u2F800-\u2FA1F]+


-- 일어 찾기 : 히라가나, 가타카나, 가타카나 음성 확장

[\u3040-\u309F\u30A0-\u30FF\u31F0-\u31FF]+


-- SQL 변수 찾기

(?i:declare|,)\s+?(?:(?<var>@[\w@$#]+)\s+(?<type>[\w()]+))+

\b(\@\w+)|(\:\w+)\b

\@\w+

@[\w\d_@$]+

@[^\s=;\n]+(?=[\s=;\n])

\\b:[\\w]*


-- 주석

\@\w+     # #으로 시작하고 줄바꿈을 만날때까지 \n

\@\w+     (?#  이렇게 주석을 처리할 수도 있다...)




----------------------------------------------------------------------

-- 중첩 괄호/브라켓 관련 처리

-- 중첩 구조 매칭

-- 중첩된 괄호에 매칭하기

\((?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))\)



-- string Format용 PalceHolder 찾기(숫자와 문자 허용)

\{\w+\}

\{\w+\}|(?<!\{)\{([0-9]+).*?\}(?!})


-- 더블쿼터로 묶인 구문 찾기

\"([^\"]*)\"


-- 대괄호 구문 찾기


-- 중괄호 '( )' 내부 문자 찾기

(?<=\{).*(?=\})


-- 대괄호'[ ]' 내부가 특정문자 시작되는 부분 찾기

(?<=\[)DSDC.*(?=\]) # 대괄호 내부가 DSDC로 시작하는 문자열에서 대괄호는 제외

(?<=\[DSDC).*(?=\]) # 대괄호 내부가 DSDC로 시작하는 문자열에서 대괄호와 DSDC 문자열은 제외


-- 메소드(함수) 호출부분 찾기

(AnyMethod|SomeMethod)\([^()]*\)

\w+\([^()]*\)



-- 이름=값 쌍 찾기

(?m)^\s*(?'name'\w+)\s*=\s*(?'value'.*)\s*(?=\r?$)

(\S+?)\s*=\s*(\S+)


-- 이름=값 또는 이름:값 쌍 찾기

(?m)^\s*(?'name'\w+)\s*[=:]\s*(?'value'.*)\s*(?=\r?$)



-- jack 과 james 를 순서에 포함하는 문자열 찾기

(?=.*\bjack\b)(?=.*\bjames\b).*


-- 'SER=' 과 '[DSDC' 를 포함하는 문자열 찾기

(?=.*\SER\=\b)(?=.*\[DSDC\b).*