replace() 함수

  • 자바스크립트에서 특정문자 또는 특수문자를 제거할때 replace() 함수를 사용하는 경우 , #가 여러번 있는 문자열(주민번호,전화번호)을 단순히 replace('#','')로 하면, 처음 #기호만 삭제되고 나머지는 삭제되지 않습니다.
var testStr = "#1#2#3";
testStr.replace("#","");

//결과값 : 1#2#3



replace()함수와 정규식을 활용하여 Java의 replaceAll() 함수와 동일한 기능을 하도록 만들어 보겠습니다. 

var testStr = "#1#2#3";
testStr.replace(/\#/g,"");

//결과값 : 123

해당 코드를 이용하여 replaceAll() 함수를 생성하여 사용하도록 합니다.

 

 

추가내용

  • 자주쓰는 정규식
    • 특정문자 제거(#제거)   : str.replace(/\#/g,'');
    • 앞의 공백 제거           : str.replace(/^\s+/,'');
    • 뒤 공백 제거              : str.replace(/\s+$/,'');
    • 앞 공백 제거              : str.replace(/^\s+|\s+$/g,'');
    • 문자열 내의 공백 제거 : str.replace(/\s/g,'');
    • 줄바꿈 제거               : str.replace(/\n/g,'');
    • 엔터 제거                  : str.replace(/\r/g,'');
    • 0 제거                      : str.replace(/[^(1-9)]/gi,"");

 

 

오늘은 와이프님의 부탁으로 영문만 뽑아내는 자바 프로그램을 만들어 보았다 -_-

 

 

package expTest.com.exp.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExpTestClass {

public static void main(String[] args) {
      Pattern nonValidPattern = Pattern.compile("[a-zA-Z]");

String str = "1234 @#$@#$@#abc123123ZZZZZZZZ1231312313";
Matcher matcher = nonValidPattern.matcher(str);
String result = ""; 
  
while (matcher.find()) {
    result += matcher.group(); 
}

 
           System.out.println(result);
        }

}

 

배워서 남주는것이 아니다 마누라 주는것이다 ㄷㄷㄷㄷ

1. 정규 표현식이란.

   문자열의 특정한 패턴을 표시하거나 검사하기 위한 규칙을 의미하며 어떤 문자열의 집합을 표시하는 텍스트 string이나 일반적인

   텍스트 형시의 문서 등에서 문자열을 찾아내거나 검사하고 치환하는데 사용된다. 이러한 정규 표현식은 정규 표현식을 표시하는

   특수문자와 정규 표현식을 검사하기 위한 함수가 있다.

 

2. 패턴을 표현하는 특수 문자

특수 문자

내용

해당문자열

.

 임의의 한 글자를 의미한다.

 a.b (abc, acb, afb...)

*

 * 바로 앞의 문자가 없거나 한개 이상이 있을 경우

 a*b (b, ab, aab, aaab...)

+

 + 바로 앞의 문자가 최소 한 개 이상일 때 

 a+b (ab, aab, aaab...)

?

 ? 바로 앞의 문자가 없거나 한 개 존재하는 경우

 a?b (b, ab, cb, zb...)

^

 ^ 뒤에 문자열과 같은 문자열로 시작한는 경우

 [] 안에서 ^ 는 [] 안의 문자를 제외한 문자를 의미한다.

 ^ab (ab, abc, abdr...)

$

 $ 앞의 문자열과 같은 문자열로 끝나는 경우

 ab$ (ab, sab, aaab...)

[]

 [] 안의 문자열 중에 하나만의 문자만을 의미한다.

 [a-z], [0-9], [a-zA-Z]

{}

 {} 앞의 문자열의 개수를 의미한다.

 a{1-3}b (ab, aab, aaab)

()

 () 안의 문자는 그룹으로 인식한다.

 a(bc){2} (abcbc)

|

 or 연산자이다.

 a(b|c)d (abd, acd)

[[:alpha:]]

 모든 알파벳의 문자 한 자를 의미한다.

 [a-zA-Z]와 동일

[[:digit:]]

 모든 숫자 한 자를 의미한다.

 [0-9]와 동일

[[:alnum:]]

 알파벳과 숫자중 한 자를 의미한다.

 [a-zA-Z0-9]와 동일

[[:space:]]

 공백 문자를 의미한다.

 

[[:punct:]]

 구두점을 의미

 

\

 . * + ? ^ $ [] {} () | \ 문자를 표시할때

 (\*, \\, \[1\], \|...)

 

3. 정규 표현식의 특수문자 사용법

  1) ^a?bc : a로 시작해서 bc로 끝나는 문자(abc로 시작하는 문자)와 bc로 시작하는 모든 문자 (예 abcd, bcd)

  2) ^.a : a앞에 아무 한 문자가 있어야 하고 그 문자로 시작하고 a가 들어간 문자 (예 aa, bacd, match, para)

  3) a?b$ : b로 끝나는 문자열 중에 a가 없거나 한 개 이상 존재하는 문자열 (예 b, ab, aab)

  4) a?b+$ : 첫 글자는 a가 있거나 없고 b가 한 개 이상이고 b로 끝나는 문자 (예 ab, b, bb, abbb, abbbb)

  5) ^ab$ : 첫 글자가 a이고 끝나는 문자가 b인 경우 (예 ab)

  6) [ab]cd : a나 b중에 한 글자와 cd가 포함된 acd, bcd를 포함한 문자 (예 acd, bcd, acdse)

  7) ^[a-zA-Z] : 영문자로 시작하는 모든 문자 (예 a, b, c, d, ee)

  8) [^ab]cd : cd 문자열 앞에 a나 b를 제외한 문자가 있는 문자열 즉, acd와 bcd를 제외한 문자열을 의미한다. (예 scd, dcd, ffcd)

  9) a{2,}b : a의 개수가 최소 2개 이상이고 다음 문자가 b인 문자 (예 aab, aaabcd, aaaab)

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


2018.10.24 추가


+, -, 소수점을 허용하는 숫자형식 체크 정규식 : ^[+-]?\\d*(\\.?\\d*)$


Java 사용예제 


// +,-,소수점 포함 숫자형식 체크

Pattern p = Pattern.compile("^[+-]?\\d*(\\.?\\d*)$");

Matcher m = null;


 m = p.matcher(qty);     //수량

 if(!m.find()) {

     errorText.append("[수량 오류 : "+qty+"]");

      } 




'Web > JQuery' 카테고리의 다른 글

Select Box 다루기  (0) 2014.12.19
정규표현식 기초  (0) 2014.12.18
checkbox checked 설정  (0) 2014.10.17
Datepicker 대만 번체 zh-TW 번역자료  (0) 2014.07.28
JavaScript Class 상속  (0) 2014.05.21

10g 이상부터 가능

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

★ 오라클 정규식 사용 팁
Oracle 10g에서는 REGEXP_로 시작하는 함수를 지원합니다.
Regular Expression이라고 하죠~

 

1. REGEXP_LIKE
- LIKE 연산자와 유사하며, 표현식 패턴(Regular Expression Pattern)을 수행하여, 일치하는 값을 반환합니다.
- 문법 : REGEXP_LIKE(srcstr, pattern [,match_option])
- srcstr : 소스 문자열, 검색하고자 하는 값.

- pattern : Regular Expression Operator를 통해 문자열에서 특정 문자를 보다 다양한 pattern으로 검색하는 것이 가능.
- match_option : match를 시도할 때의 옵션. 찾고자 하는 문자의 대소문자 구분이 기본으로 설정. 대소문자를 구분할 필요가 없다면 'i' 옵션 사용을 지정한다.
[[:digit:]] : 숫자인 것.
[^[:digit:]] : 숫자가 아닌 것.

[^expression] : expression의 부정.

[ ] : []안에 명시되는 하나의 문자라도 일치하는 것이 있으면 나타냄.
- 예제 1

SELECT SSN
FROM test
WHERE REGEXP_LIKE(SSN, '[^[:digit:]]');

SSN
--------------------
******2229198
******2047888
******2349876

- 예제 2 : 제품의 이름 중에 'SS' 다음에 'P'를 포함하지 않은 문자열을 찾자.

SELECT product_name

FROM oe.product_information

WHERE REGEXP_LIKE(product_name, 'SS[^P]');

- 예제 3 : 제품 이름에 'SS' 다음 'P'나 'S'를 포함하는 문자열을 찾자.

SELECT product_name

FROM oe.product_information

WHERE REGEXP_LIKE(product_name, 'SS[PS]');

 

- 예제 4 : 메일 주소에 '@'이 포함되도록 설정.

ALTER TABLE customers

ADD CONSTRAINT cust_email_addr

CHECK(REGEXP_LIKE(cust_email, '@')) NOVALIDATE;

※ 참고 : 제약조건 해제

ALTER TABLE customers

DROP CONSTRAINT cust_email_addr;

 

 

2. REGEXP_SUBSTR
- SUBSTR 함수의 기능을 확장하였습니다. 주어진 문자열을 대상으로 정규 표현식 패턴을 수행하여, 일치하는 하위 문자열을 반환합니다.
- 문법 : REGEXP_SUBSTR(srcstr, pattern, [,position[,occurrence[,match_option]]])
- srcstr : 소스 문자열
- position : Oracle이 문자열에서 특정 문자를 어디에서 찾아야 하는지 위치를 나타냄. 기본으로 1로 설정되어 있으므로, 문자열의 처음부터 검색을 시작.
- occurrence : 검색하고자 하는 문자열에서 특정 문자의 발생 횟수. 기본으로 1로 설정되어 있으며, 이는 Oracle이 문자열에서 첫번째 발생 pattern을 찾는다는 의미.
- match_option : match를 시도할 때의 옵션
- 예제

SELECT REGEXP_SUBSTR(email, '[^@]+', 1, 1) AS "ID"
, REGEXP_SUBSTR(email, '[^@]+', 1, 2) AS "MailAddr"
FROM ( SELECT
'hellokitty@empal.com' email
FROM dual );


ID MailAddr
---------------------

hellokitty empal.com

 

 

3. REGEXP_REPLACE
- 주어진 문자열을 대상으로 정규 표현식 패턴을 조사하여, 다른 문자로 대체합니다.
- 문법 : REGEXP_REPLACE(srcstr, pattern [,replacestr[,position[,occurrence[,match_option]]]])
- replacestr : 대체하고자 하는 문자열을 나타냅니다.
- 예제 1 : 주민번호 뒷자리를 '*'로 표현

SELECT REGEXP_REPLACE(SSN, '[0-9]', '*', 7) AS "SSN"
FROM ( SELECT '7907051234567' SSN
FROM dual );

SSN
-------------
790705*******

- 예제 2 : 둘 이상의 공백 문자를 하나로 대체하여 가독성을 높이자.
SELECT REGEXP_REPLACE('Oracle is the Information Company', '( ){2,}', ' ') AS "Result"
FROM dual;


RESULT
-----------------------------------
Oracle is the Information Company
- 예제 3 : 전화번호의 표현 방식을 3자리, 3자리, 4자리로 묶어 식별력을 높이자.

SELECT REGEXP_REPLACE('555.123.4567','([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})','(\1) \2 - \3') AS "Result1"

FROM dual;

 

Result1

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

(555) 123 - 4567

-. [:digit:] : 숫자 값.
-. [:alpha:] : 문자 값.
-. [:alnum:] : 문자와 숫자를 함께 사용.

 

4. REGEXP_INSTR
- 정규 표현을 만족하는 부분의 위치를 반환합니다.
- 문법 : REGEXP_INSTR(srcstr, pattern [,position[,occurrence[,returnparam[,match_option]]]])
- position : 검색 시작 위치
- occurrence : 발생 횟수.
- returnparam : 반환 옵션.
- match_option : match를 시도할 때의 옵션.
-. 예제

SELECT REGEXP_INSTR('Regular Expression', 'a') AS "REGEXP_INSTR"
FROM dual;


REGEXP_INSTR
---------------
6

 

※ 참고 site

Oracle Database Documentation Library

http://www.oracle.com/pls/db10g/homepage

C Oracle Regular Expression Support

http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/ap_posix.htm

 

 

 

'DB > Oracle' 카테고리의 다른 글

DOS Mode (CMD) 창에서 Query 결과를 File로 Export  (0) 2014.06.04
SQLPLUS로 다른 네트워크에 접속하기  (0) 2014.06.04
오라클 케시 지우기  (0) 2014.06.04
오라클 엔터값 처리  (0) 2014.06.04
테이블 설계시 참고사항  (0) 2014.06.04

+ Recent posts