MySQL 정규식으로 치환 함수

DELIMITER $$

CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END$$

DELIMITER ;

본문 : https://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/

아.. 2013부터는 정규식이 다르구나.

정규식으로 코드를 일괄변경할 일이 있어서 정규식을 먹이는게 뒤지게 안돌아가는거다.

아 짜증나서 봤드만;;

ㅋㅋㅋ


다음 표를 사용하여 이전 버전의 Visual Studio에서
사용된 정규식 버전을 .NET Framework 정규식으로 변환할 수 있습니다.

용도

새 그룹

이전

새 예제

줄 바꿈 문자를 제외한 모든 단일 문자를 찾습니다.

.

.

a.o는 "around"에서 "aro"와 일치하고 "about"에서 "abo"와 일치하지만 "across"에서 "acro"와는 일치하지 않습니다.

앞의 식을 0번 이상 찾습니다(가능한 한 많은 수의 문자가 일치).

*

*

a*r은 "rack"의 "r", "ark"의 "ar", 그리고 "aardvark"의 "aar"과 일치합니다.

0회 이상 일치하는 문자를 찾습니다(와일드카드 *).

.*

.*

c.*e는 “racket”의 “cke”, “comment”의 “comme” 및 “code”의 “code”와 일치합니다.

앞의 식을 1번 이상 찾습니다(가능한 한 많은 수의 문자가 일치).

+

+

e.+e는 "feeder"의 "eede"와 일치하지만 "ee"와는 일치하지 않습니다.

1회 이상 일치하는 문자를 찾습니다(와일드카드 ?).

.+

.+

e.+e는 "feeder"에서 "eede"는 찾지만 "ee"는 찾지 않습니다.

앞의 식을 0번 이상 찾습니다(가능한 한 적은 수의 문자가 일치).

*?

@

e.*?e는 "feeder"의 "ee"와 일치하지만 "eede"와는 일치하지 않습니다.

앞의 식을 1번 이상 찾습니다(가능한 한 적은 수의 문자가 일치).

+?

#

e.+?e는 "enterprise"의 "ente" 및 "erprise"는 찾지만 "enterprise"라는 전체 단어는 찾지 않습니다.

줄 또는 문자열의 시작 부분에서 일치하는 문자열을 찾습니다.

^

^

^car는 "car"라는 단어가 줄의 시작에 나타날 때만 일치합니다.

줄의 끝 부분에서 일치하는 문자열을 찾습니다.

\r?$

$

End\r?$는 줄 끝에 나타나는 "end"와만 일치합니다.

집합에서 임의의 단일 문자를 찾습니다.

[abc]

[abc]

b[abc]는 "ba", "bb" 및 "bc"와 일치합니다.

문자 범위에서 일치하는 문자를 찾습니다.

[a-f]

[x-y]

be[n-t]는 "between"의 "bet", "beneath"의 "ben", 그리고 "beside"의 "bes"는 찾지만 "below"는 찾지 않습니다.

괄호 안에 포함된 식 캡처 및 암시적으로 번호 지정

()

()

([a-z])X\1은 "aXa" 및 "bXb"와 일치하지만 "aXb"는 일치하지 않습니다. ". “\1”은 첫 번째 식 그룹 “[a-z]”을 가리킵니다.

일치 무효화

(?!abc)

~(abc)

real (?!ity)는 "realty"와 "really"에서 "real"은 찾지만 "reality"에서는 찾지 않습니다. 또한 "realityreal"에서 두 번째 "real"(첫 번째 "real"이 아님)을 찾습니다.

지정된 문자 집합에 없는 문자와 일치

[^abc]

[^abc]

be[^n-t]는 "before"의 "bef", "behind"의 "beh", 그리고 "below"의 "bel"은 찾지만 "beneath"는 찾지 않습니다.

기호 앞 또는 뒤에 나오는 식을 찾습니다.

|

|

(sponge|mud) bath는 "sponge bath"와 "mud bath"를 모두 찾습니다.

백슬래시 다음에 오는 문자는 이스케이프됩니다.

\

\

\^는 ^ 문자를 찾습니다.

이전 문자 또는 그룹의 발생 횟수를 지정합니다.

{x}, 여기서 x는 일치하는 항목의 수입니다.

\x, 여기서 x는 일치하는 항목의 수입니다.

x(ab){2}x는 "xababx"와 일치하고, x(ab){2,3}x는 "xababx" 및 "xabababx"와 일치하지만 "xababababx"와는 일치하지 않습니다.

유니코드 문자 클래스의 텍스트와 일치합니다. 여기서 "X"는 유니코드 번호입니다. 유니코드 문자에 대한 자세한 내용은 다음을 참조하십시오.

유니코드 표준 5.2 문자 속성.

\p{X}

:X

\p{Lu}는 "Thomas Doe"의 "T" 및 "D"와 일치합니다.

단어 경계를 찾습니다.

\b (\b는 문자 클래스 외부에서 단어 경계를 지정하며 문자 클래스 안에서는 백스페이스를 지정합니다.)

< 및 >은 단어의 시작과 끝을 지정합니다.

\bin은 "inside"의 "in"과 일치하지만 "pinto"와는 일치하지 않습니다.

줄 바꿈(즉, 캐리지 리턴 및 새 줄)과 일치합니다.

\r?\n

\n

End\r?\nBegin은 "End"가 줄의 마지막 문자열이고 "Begin"이 다음 줄의 첫 번째 문자열인 경우에만 "End" 및 "Begin"을 찾습니다.

일치하는 영숫자 문자를 찾습니다.

\w

:a

a\wd는 "add" 및 "a1d"와 일치하지만 "a d"와는 일치하지 않습니다.

임의의 공백 문자를 찾습니다.

(?([^\r\n])\s)

:b

Public\sInterface는 "Public Interface"라는 구를 찾습니다.

일치하는 숫자 문자를 찾습니다.

\d

:d

\d는 "3456"의 "3", "23"의 "2", "1"의 "1"과 일치합니다.

유니코드 문자를 찾습니다.

\uXXXX, 여기서 XXXX는 유니코드 문자 값을 지정합니다.

\uXXXX, 여기서 XXXX는 유니코드 문자 값 지정

\u0065는 문자 "e"를 찾습니다.

식별자와 일치

\b(_\w+|[\w-[0-9_]]\w*)\b

:i

"type1"은 찾지만 &type1" 또는 "#define"은 찾지 않습니다.

따옴표 안의 문자열과 일치

((\".+?\")|('.+?'))

:q

문자열 안의 작은따옴표 또는 큰따옴표와 일치합니다.

16진수 숫자와 일치

\b0[xX]([0-9a-fA-F])\b

:h

"0xc67f"와 일치하지만 "0xc67fc67f"는 일치하지 않습니다.

정수 및 소스와 일치

\b[0-9]*\.*[0-9]+\b

:n

"1.333"을 찾습니다.


링크 : http://msdn.microsoft.com/ko-kr/library/2k3te2cs.aspx

////////////////////////////////////////////////////////////////////////////
// 자바스크립트 정규식 메소드
////////////////////////////////////////////////////////////////////////////

test()
compile()
match()
replace()
search()

////////////////////////////////////////////////////////////////////////////
// 자바스크립트 정규식 표현
////////////////////////////////////////////////////////////////////////////

\  다음에 오는 문자를 특수 문자나 리터럴로 표시합니다. 예를 들어, "n"은 문자 "n"과 일치합니다. "\n"은 줄 바꿈 문자와 일치합니다. 시퀀스 "\\"은 "\"와 같고, "\("는 "("와 같습니다.

^  입력의 시작 부분을 찾습니다.

$  입력의 끝 부분을 찾습니다.

*  앞에 오는 문자를 0번 이상 찾습니다. 예를 들어, "zo*"를 입력하면 "z" 또는 "zoo"를 찾습니다.

+  앞에 오는 문자를 1번 이상 찾습니다. 예를 들어, "zo+"를 입력하면 "zoo"를 찾지만 "z"는 여기에 포함되지 않습니다. 

?  앞에 오는 문자를 0번 이상 찾습니다. 예를 들어, "a?ve?"를 입력하면 "never"에 있는 "ve"를 찾습니다.

. 줄 바꿈 문자를 제외한 단일 문자를 찾습니다.

(pattern)  pattern을 찾고 일치하는 내용을 기억합니다. 일치하는 부분 문자열은 Item [0]...[n]을 사용하여 결과로 나오는 Matches 컬렉션에서 검색할 수 있습니다. 괄호 문자 ( )를 찾으려면 "\(" 또는 "\)"를 사용합니다.

x|y x 또는 y를 찾습니다. 예를 들어, "z|food"는 "z" 또는 "food"를 찾습니다. "(z|f)ood"로는 "zoo"나 "food"를 찾을 수 있습니다.

{n} n은 음이 아닌 정수입니다. 정확하게 n번 일치하는 부분을 찾습니다. 예를 들어, "o{2}"는 "Bob"의 "o"를 찾지 않지만 "foooood"의 처음 두 o를 찾습니다.

{n,}  n은 음이 아닌 정수입니다. 적어도 n번 일치하는 부분을 찾습니다. 예를 들어, "o{2,}"는 "Bob"의 "o"를 찾지 않지만 "foooood"의 o는 모두 찾습니다. "o{1,}"은 "o+"와 같습니다. "o{0,}"은 "o*"과 같습니다.

{n,m}  m과 n은 음이 아닌 정수입니다. 최소 n번, 최대 m번 일치하는 부분을 찾습니다. 예를 들어, "o{1,3}"은 "fooooood"의 처음 세 o를 찾습니다. "o{0,1}"은 "o?"와 같습니다.

[xyz]  문자 집합입니다. 괄호 안의 문자 중 하나를 찾습니다. 예를 들어, "[abc]"는 "plain"의 "a"를 찾습니다.

[^xyz]  문자 집합에 없는 문자를 찾습니다. 괄호 안에 있지 않은 문자 중 하나를 찾습니다. 예를 들어, "[^abc]"는 "plain"의 "p"를 찾습니다.

[a-z]  문자 범위입니다. 지정한 범위에 있는 문자 중 하나를 찾습니다. 예를 들어, "[a-z]"는 "a"에서 "z"까지의 알파벳 소문자를 찾습니다.

[^m-z]  지정한 문자 범위가 아닌 집합입니다. 지정한 범위에 있지 않은 문자 중 하나를 찾습니다. 예를 들어, "[m-z]"는 "m"에서 "z"까지에 없는 문자를 찾습니다.

\b  단어의 경계, 즉 단어와 공백 사이의 위치를 찾습니다. 예를 들어, "er\b"는 "never"의 "er"를 찾지만 "verb"의 "er"는 찾지 않습니다.

\B  단어의 경계에 있지 않은 문자를 찾습니다. "ea*r\B"는 "never early"의 "ear"을 찾습니다. 

\d  숫자를 찾습니다. [0-9]와 같습니다.

\D  숫자가 아닌 문자를 찾습니다. [^0-9]와 같습니다.

\f  용지 공급 문자를 찾습니다.

\n  줄 바꿈 문자를 찾습니다.

\r  캐리지 리턴 문자를 찾습니다. 

\s  공백, 탭, 용지 공급 등 모든 종류의 공백 문자를 찾습니다. "[ \f\n\r\t\v]"와 같습니다.

\S  공백 문자가 아닌 문자를 찾습니다. "[^ \f\n\r\t\v]"와 같습니다. 

\t  탭 문자를 찾습니다. 

\v  세로 탭 문자를 찾습니다. 

\w  밑줄을 포함한 모든 단어 문자를 찾습니다. "[A-Za-z0-9_]"와 같습니다. 

\W  단어가 아닌 문자를 찾습니다. "[^A-Za-z0-9_]"와 같습니다. 

\num  num을 찾습니다. 여기서 num은 양의 정수입니다. 이전에 참조한 값을 다시 참조합니다. 예를 들어, "(.)\1"은 연속적으로 같은 문자가 두 번 나오는 것을 찾습니다. 

\n n을 찾습니다. 여기서 n은 8진 제어 값입니다. 8진 제어 값은 1, 2, 3 자리 중 하나라야 합니다. 예를 들어, "\11"과 "\011"은 모두 탭 문자를 나타내지만 "\0011"은 "\001" & "1"과 같습니다. 8진 제어 값은 256을 넘을 수 없습니다. 이 값이 256을 넘는 경우에는 처음 두 자릿수 만이 식을 구성합니다. 정규식에 ASCII 코드를 사용할 수 있습니다.

\xn n을 찾습니다. 여기서 n은 16진 제어 값입니다. 16진 제어 값은 정확히 두 자리이어야 합니다. 예를 들어, "\x41"은 "A"에 해당하지만 "\x041"은 "\x04" & "1"과 같습니다. 정규식에 ASCII 코드를 사용할 수 있습니다.
 

+ Recent posts