사용자 도구

사이트 도구


regexp:정규표현식

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
regexp:정규표현식 [2013/08/06 14:39] – [Web Link] kieunsregexp:정규표현식 [2024/04/23 22:43] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +<title>
 +정규식 규칙
 +</title>
 +
 +====== 표현 규칙 ======
 +
 +이것만 봐서는 전혀 감이 안오지만..
 +
 +^ 한글자에 대해서                                                                                                                                         ^
 +|           [abc]           | a,b,c 중 아무 한 문자라도 있으면 선택                                                                                         |
 +|        %%[^abc]%%         | a,b,c 를 제외한 나머지 어떤 문자라도 나오면 선택                                                                              |
 +|           [a-z]           | a ~ z 사이의 어떤 글자라도                                                                                                    |
 +|         [a-zA-Z]          | a ~ z , A ~ Z 사이의 어떤 알파벳 문자라도                                                                                     |
 +^ 미리 정의된 글자셋을 선택 ^                                                                                                                               ^
 +|            \s             | [ \t\n\r\f\v] 왼쪽의 글자(공백문자들) 가운데 어떤 문자인 경우                                                                 |
 +|            \S             | %%[^ \t\n\r\f\v]%% 왼쪽의 글자(공백문자들)가 아닌 다른 어떤 문자의 경우                                                       |
 +|            \d             | 0~9 사이의 숫자를 찾으면                                                                                                      |
 +|            \D             | 숫자가 아닌 (%%[^0-9]%%) 문자를 찾으면                                                                                        |
 +|            \w             | 영문자, 숫자의 글자를 찾으면 (%%[a-zA-Z0-9_]%%)                                                                               |
 +|            \W             | 영문자, 숫자를 제외한 다른 글자를 찾으면                                                                                      |
 +|            \b             | \w 또는 \W 에 해당되는 단어의 사이를 찾으면                                                                                   |
 +|            \B             | 단어 끝 부분이 아닌 곳                                                                                                        |
 +|          \<글자>          | \ 다음에 오는 문자를 순수 문자로 인식. '.'과 같은 키워드를 글자로 사용하려고 할때 씁니다.                                     |
 +^      선택지, 그룹화                                                                                                                                     ^
 +|          **()**           | 찾으려는 문자열을 한개의 그룹으로 본다. 매우 요긴함.                                                                          |
 +|           %%|%%           | 왼쪽 아니면 오른쪽 문자 중 어떤 것을 먼저 찾으면 \\ %%(^Css)|(cSS$)%% Css로 시작되는 문자열 또는 cSS로 끝나는 문자열을 찾으면 |
 +|           %%^%%           | 문자열의 시작 부분에 찾으려는 글자가 있는 경우 \\ %%^aB%% aB로 시작되는 문자열을 찾는다.                                      |
 +|                         | 문자열의 끝 부분에 찾으려는 글자가 있는 경우                                                                                  |
 +
 +====== 그룹 기능 추가 ======
 +
 +검색된 문자열의 일부분에 대해서, 뭔가 하고 싶을때
 +
 +  * 검색은 하되 그룹된 부분은 제외한 부분만 캡쳐하고 싶을때
 +
 +라든지, 경험 부족으로 다른 경우는 잘 모르겠지만.
 +
 +| {{:regexp:regexp-group-select-1.png|}} | {{:regexp:regexp-group-select-2.png|}} |
 +
 +간단한 예 
 +
 +<code>
 +| toggle breakpoint  f9
 +| ::: |</code>
 +
 +'f9' 다음 개행 문자만 선택하고 ':: %%|%%' 다음 부분의 개행문자는 무시하고 싶을때 
 +
 +<code reg>(?<=[^|])\n</code>
 +  - %%|%%가 아닌 한 글자 + 개행문자를 선택하고 
 +  - %%|%%가 아닌 한 글자 뒷부분만 선택 값으로 캡춰한다.
 +
 +
 +===== Repetition Operator =====
 +
 +|  {n,m}  | 앞쪽의 선택 규칙이 n 번 이상, m 번 미만 나오는 규칙. (와우..)(n > ? > m) |
 +|  {n,}   | Match the previous item n or more times                                  |
 +|   {n}   | Match exactly n occurrences of the previous item                         |
 +|    ?    | 없거나 하나인 문자 찾기 (이전 검색 결과로부터) {0,1}                     |
 +|    +    | Match 1 or more occurrences of the previous item {1,}                    |
 +|    *    | Match 0 or more occurrences of the previous item {0,}                    |
 +
 +===== Option =====
 +| g | "Global" -- find all matches in the string rather than just the first          |
 +| i | "case Insensitive" -- ignore character case when matching                      |
 +| m | "Multiline" -- search over more than one line if the text contains line breaks |
 +
 +===== Web Link =====
 +  * [[http://blog.naver.com/PostView.nhn?blogId=yonga&logNo=150004198246|정규식 구문 정리(Regex)]]
 +  * [[http://sourceforge.net/projects/regulator/|정규식 테스트 프로그램]] : 자동완성 기능이 있어서 알아보기 좋음.
 +====== 사용하면서 정리 ======
 +
 +웹에서 미리 확인 가능한..
 +
 +  * [[http://osteele.com/tools/rework/]] : 제일 나은 듯, 프로그래밍 언어로 컨버팅 해준다.
 +  * 
 +  * [[http://www.digitalcoding.com/tools/regex-tester.html]] : ui 구성이 괜찮음
 +  * [[http://regexlib.com/RESilverlight.aspx]] : 좀더 비주얼하게 체크
 +
 +그외
 +
 +  * 다른 사이트나 프로그램 추가 안내 사이트 : [[http://www.hongkiat.com/blog/regular-expression-tools-resources/]]
 +  * [[http://www.regular-expressions.info/php.html]] :  프로그래밍 방식 설명
 +
 +======= '#'으로 시작하는지 검사 =====
 +
 +<code>
 +          ##dkfjdkfjdkfjdkjfkdjf
 +(or)
 +##dkfjdkfjdkfjdkjfkdjf
 +</code>
 +
 +에서 '#'으로 줄이 시작되는지 검색하기 위해서
 +
 +줄의 시작에 공백이 있거나 (없거나) 상관없이 #으로 시작되는 글자들
 +<code reg>
 +^[ \t]*# 
 +</code>
 +
 +줄의 시작에 공백이 있거나 (없거나) 상관없이 #이 두개로 시작되는지 확인 있다면 체크
 +<code reg>
 +^[ \t]*#{2}
 +</code>
 +
 +====== 키워드를 분리하기 위한 토큰 =====
 +
 +아래처럼 입력되는 라인에서 각 토큰을 분리하기 위한 정규표현, 조건은
 +
 +  * 공백 2개
 +  * ','로 분리. 앞뒤 공백은 무시
 +  * 탭
 +
 +<code>
 +starbucks  300  2010/1/27
 +starbucks ,  300 ,  2010/1/27
 +starbucks 300 2010/1/27
 +</code>
 +
 +이 스트링에서, 각각 토큰을 구분하기 위해서 찾기 위한 코드
 +
 +<code reg>
 +basic code   : ([ ]{2})|,|\t
 +upgrade code : ([ ]{2})|\t|([\t ]*,[\t ]*)
 +</code>
 +
 +설명
 +
 +  - "([ ]{2})" : 공백 2개를 찾는다.
 +    * "()"는 안의 것을 서브 선택문이 된다.
 +    * "[ ]"는 공백을 의미한다.
 +    * "[ ]{2}" 에서 {2}는 반복수를 의미하는데 "[ ]"가 2번 (공백2개) 반복되는 것을 의미한다.
 +  - '|' 는 또는 (or) 논리 연산
 +  - "\t" : 탭을 찾는다.
 +  - "([\t ]*,[\t ]*)" : 콤마를 찾는다.
 +    * "[\t ]*" 콤마 전후로 탭이나 공백이 있으면 그것들도 포함한다는 의미
 +    * " , " 나 ", " 나 "," 등을 선택하게 된다.
 +
 +====== 중간 문자 추출 =====
 +
 +아직 연속 검색은 무리
 +
 +sports 영역만 ( ":/ / ~ ." 사이의 문자 )
 +
 +<code>
 +http://sports.khan.co.kr/club3/board.html?bid=8&aid=154484
 +http://sports.khan.co.kr/club3/board.html?bid=8&aid=154483
 +http://sports.khan.co.kr/club3/board.html?bid=8&aid=154482
 +</code>
 +
 +msdn에서 사용한 참고 예정
 +
 +<code>
 +http://search.microsoft.com/us/Search.asp?qu=atl&boolean=ALL#results
 +
 +"({[^:/?#]+}:)?(//{[^/?#]*})?{[^?#]*}(?{[^#]*})?(#{.*})?" 
 +</code>
 +
 +이걸 사용하면 , 아래 같은 결과가 나온다는데..
 +
 +<code>
 +0: "http"
 +1: "search.microsoft.com"
 +2: "/us/Search.asp"
 +3: "qu=atl&boolean=ALL"
 +4: "results"
 +</code>
 +
 +이해한 부분
 +
 +<code>
 +[^:/?#]+  --> http (1)
 +
 +://search.microsoft.com/us/Search.asp?qu=atl&boolean=ALL#results
 +
 +로 검색시작
 +
 +[^/?#]* --> search.microsoft.com (2)
 +
 +([^://]+)?=([^.?]*)
 +</code>