차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
tech:regex [2014/03/18 09:01] – 바깥 편집 127.0.0.1 | tech:regex [2016/07/12 00:56] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | {{tag> | ||
+ | ====== 정규식 (Regular expression)====== | ||
+ | |||
+ | |.|Any character except newline. | | ||
+ | |\\.|A period (and so on for \\*, \\(, \\\\, etc.) | | ||
+ | |%%^%%|The start of the string. | | ||
+ | |$|The end of the string. | | ||
+ | |\\d, | ||
+ | |\\D, | ||
+ | |[abc]|Character a, b, or c. | | ||
+ | |[a-z]|a through z. | | ||
+ | |%%[^abc]%%|Any character except a, b, or c. | | ||
+ | |%%aa|bb%%|Either aa or bb. | | ||
+ | |?|Zero or one of the preceding element. | | ||
+ | |*|Zero or more of the preceding element. | | ||
+ | |+|One or more of the preceding element. | | ||
+ | |{n}|Exactly n of the preceding element. | | ||
+ | |{n,}|n or more of the preceding element. | | ||
+ | |{m, | ||
+ | |??,*?,+?, | | ||
+ | |{n}?, etc.|Same as above, but as few as possible. | | ||
+ | |(expr)|Capture expr for use with \\1, etc. | | ||
+ | |(?: | ||
+ | |(? | ||
+ | |(? | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | =====시작과 끝===== | ||
+ | (1) ^ (caret) : 라인의 처음이나 문자열의 처음을 표시 | ||
+ | 예 : ^aaa (문자열의 처음에 aaa를 포함하면 참, 그렇지 않으면 거짓) | ||
+ | (2) $ (dollar) : 라인의 끝이나 문자열의 끝을 표시 | ||
+ | 예 : aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓) | ||
+ | =====문자표현===== | ||
+ | (3) . (period) : 임의의 한 문자를 표시. 단 개행(New line) 제외 | ||
+ | 예 : ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓) | ||
+ | a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참) | ||
+ | (4) [] (bracket) : 문자의 집합이나 범위를 나타냄, 두 문자 사이의 " | ||
+ | []내에서 " | ||
+ | 이외에도 " | ||
+ | 여기에서 " | ||
+ | [: | ||
+ | 이외에 [::]는 어떤 단어(숫자, | ||
+ | |||
+ | 예 : [abc] (a, b, c 중 어떤 문자, " | ||
+ | [Yy] (Y 또는 y) | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | =====반복===== | ||
+ | (5) {} (brace) : {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타냄 | ||
+ | 예 : a{3} (' | ||
+ | a{3,} (' | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | (6) * (asterisk) : " | ||
+ | 예 : ab*c (' | ||
+ | * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨) | ||
+ | .* (선행문자가 " | ||
+ | ab* (' | ||
+ | a* (' | ||
+ | | ||
+ | | ||
+ | | ||
+ | like, likely, liker, likelihood 등) | ||
+ | (7) + : " | ||
+ | 예 : ab+c (' | ||
+ | ab+ (' | ||
+ | like.+ (직전의 선행문자가 ' | ||
+ | likely, liker, likelihood 등, 그러나 like는 해당안됨) | ||
+ | [A-Z]+ (대문자로만 이루어진 문자열) | ||
+ | (8) ? : "?" | ||
+ | 예 : ab?c (' | ||
+ | |||
+ | ===() (parenthesis)=== | ||
+ | ()는 정규식내에서 패턴을 그룹화 할 때 사용 | ||
+ | |||
+ | === | (bar) === | ||
+ | or를 나타냄 | ||
+ | 예 : a|b|c (a, b, c 중 하나, 즉 [a-c]와 동일함) | ||
+ | yes|Yes (yes나 Yes 중 하나, [yY]es와 동일함) | ||
+ | korea|japan|chinese (korea, japan, chinese 중 하나) | ||
+ | === \ (backslash) === | ||
+ | 위에서 사용된 특수 문자들을 정규식내에서 문자를 취급하고 싶을 때 '' | ||
+ | |||
+ | 예 : filename\.ext (" | ||
+ | [?[\]] ('?', | ||
+ | 정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함 | ||
+ | |||
+ | =====검색 + 치환을 위한 하부식(부분식)===== | ||
+ | ( )로 둘러싼 부분은 각각 하나의 덩어리로 취급해서, | ||
+ | 검색시 ( ) 안에 해당되는 내용들을 변경할 내용에서 그대로 가져다 이용할 수 있습니다. | ||
+ | 검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서 쓸 수 있습니다. | ||
+ | 예제) mp3파일 이름 바꾸기 | ||
+ | 검색 : (.*) - (.*)\.mp3 .*은 길이에 상관없이 임의의 문자열, \.은 점 | ||
+ | 치환 : $2 - $1.mp3 앞에서 검색한 ( )안에 해당되는 내용끼리 순서 바꾸기 | ||
+ | ex) " | ||
+ | 앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데) | ||
+ | \n은 ( ) 하부식 중에서 n번째 하부식을 가리킵니다. | ||
+ | 예제) (.+)\1+ | ||
+ | \1로 되어 있으니까 첫번째 부분식 (.+)를 가리킵니다. 위 내용을 해석하자면, | ||
+ | 예제) abab같은 문자열이 위에 해당되는데, | ||
+ | =====예제===== | ||
+ | 정규식은 Unix의 대표적인 유틸리티인 vi, emacs, ed, sed, awk, grep, egrep 등에서 사용할 수 있다. 다음은 grep에서 정규식을 활용한 예를 보여 주고 있다. | ||
+ | |||
+ | (1) $ 명령어 | grep ' | ||
+ | 17.11.1999 | ||
+ | | ||
+ | ====HTML tag==== | ||
+ | 모든 태그 단순버전 | ||
+ | < | ||
+ | 특정 태그 | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | |||
+ | =====날짜===== | ||
+ | [0-9]{4}/ | ||
+ | |||
+ | |||
+ | ====주민번호==== | ||
+ | 코드 => $joomin=" | ||
+ | if (ereg(" | ||
+ | print(" | ||
+ | else print(" | ||
+ | int eregi(string givenPattern, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====이메일==== | ||
+ | 예 : | ||
+ | 코드 => $email=" | ||
+ | eregi(" | ||
+ | while (list($a, | ||
+ | if ($b) print(" | ||
+ | 결과 => 0, [email protected] | ||
+ | 1, xs9_tx-abc.yyy_c | ||
+ | 2, cne.kyungsung.ac. | ||
+ | 3, ac. | ||
+ | 4, kr | ||
+ | 코드 => eregi(" | ||
+ | while (list($a, | ||
+ | if ($b) print(" | ||
+ | 결과 => 0, [email protected] | ||
+ | 1, ac. | ||
+ | string ereg_replace(string givenPattern, | ||
+ | - givenString에서 givenPattern에 부합하는 텍스트(matched text)를 찾아서, | ||
+ | replacementPattern으로 대체 | ||
+ | givenPattern이 " | ||
+ | replacementPattern에는 이에 대응하는 " | ||
+ | (digit는 0, 1, ... ,9 중 하나). 그리고 givenString은 " | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | case sensitive | ||
+ | |||
+ | 예 : | ||
+ | 코드 => $string = "This is a test"; | ||
+ | print(ereg_replace(" | ||
+ | print(ereg_replace(" | ||
+ | print(ereg_replace(" | ||
+ | print(ereg_replace(" | ||
+ | 결과 => "This was a test"; | ||
+ | "This was a test"; | ||
+ | "This was a test"; | ||
+ | "This was an exam"; | ||
+ | |||
+ | 예 2 : redundant whitespace 없애기 | ||
+ | 코드 => $str ="~ s/s+/ /g"; | ||
+ | $str = eregi_replace(" | ||
+ | print(" | ||
+ | 결과 => ~ s/s+/ /g | ||
+ | string eregi_replace(string givenPattern, | ||
+ | - ereg_replace의 'case insensitive' | ||
+ | ====소수점 이하 자리==== | ||
+ | | ||
+ | |||
+ | ====경로에서 디렉토리와 파일이름을 분리==== | ||
+ | |||
+ | ^(.*/ | ||
+ | |||
+ | 출처: http:// | ||
+ | |||