얕고넓은지식/linux

php 정규식

쪽마 2021. 4. 14. 21:52

자바스크립트에서 특정문자 또는 특수문자를 제거할때,

-가 여러번 있는 문자열(주민번호,전화번호)을 단순히 replace('-','')로 하면, 

처음 -기호만 삭제되고 나머지는 삭제되지 않습니다.

 

하여 아래와 같이 해야 가능합니다.

value.replace(/\-/g,'');

-기호가 특수문자 이기때문에 \역슬래시를 붙여줍니다.

 

 

 

 

다른 정규식 보기

특정문자 제거            : 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,"");

 

 

정규식에서 문자가 의미하는 뜻

[a-z] : a ~ z 사이의 문자를 찾음

[abc] : a, b, c중 하나를 찾음

[^abc] : a, b, c를 제외한 문자를 찾음

 

.z : 아무 문자 하나를 . 기호로 찾으며 z로 끝남을 의미

a+ : a가 1개 이상을 의미함

a* : a가 0개 또는 그 이상을 의미함

 

s : 공백 문자를 찾음(스페이스, 탭 등)

S : 공백이 아닌 문자를 찾음

d : 숫자를 찾음

D : 숫자가 아닌 문자를 찾음

w : 알파벳 영문과 숫자와 언더바 _ 기호를 찾음

W : 알파벳 영문과 숫자와 언더바 _ 기호가 아닌 것을 찾음

t : 탭 공간을 찾음

v : 버티칼 탭 공간을 찾음

 

g : 검색범위를 전역으로 확장

i : 대소문자를 구분하지 않음

gi : 검색 범위를 전역으로 확대하면서 대소문자를 구분하지 않음

m : 여러줄을 동시에 매칭함

 

 

 

 

 

정규표현식

정규식이라고도 부른다. 보통 regex 혹은 regexp 라 많이 쓴다.

 

 

문법

문자열에서 URL을 찾는 정규표현식의 예제는 다음과 같다.

 

/(http|https|ftp|telnet|news|mms)://[^\"'\s()]+/i

 

위 정규식은 아래와 같이 구분이 된다. 

패턴구분자 시작     : /

찾을 문자열의 패턴 : (http|https|ftp|telnet|news|mms)://[^\"'\s()]+

패턴구분자 끝       : /

패턴변경자          : i

 

 

패턴구분자

정규식의 패턴이 달라질 경우 그것을 구분하는 문자로, 정규식 패턴이 하나만 있을 경우에는 굳이 쓸 필요가 없지만 

대부분 붙인다. 난해하게 만드는 주범이다. 왜냐하면, 이 패턴구분자는 특수문자 중 역슬래쉬(\)를 제외하고 

아무거나 쓸 수 있기 때문이다. 심지어 아래 등장하는 의미를 가진 문자(메타 문자라고 부른다)도 패턴구분자로 쓸 수 있다. 

보통 슬래쉬(/)를 많이 사용하지만 규칙이 있는 것이 아니라서 정말로 프로그래밍 하는 사람 마음대로다. 

이래저래 헷갈리는 주범 중 하나.

 

 

메타 문자

정규표현식에서 일정한 의미를 가지고 쓰는 특수문자를 메타 문자라고 부른다.

^ : 문자열의 시작

$ : 문자열의 종료. 옵션에 따라 문장의 끝 또는 문서의 끝에 매치된다.

. : 임의의 한 문자

[]: 문자 클래스. 문자 클래스 안에 들어가 있는 문자는 그 바깥에서 하나의 문자로 취급된다.

| : or를 나타냄

? : 앞 문자가 없거나 하나 있음

+ : 앞 문자가 하나 이상임

* : 앞 문자가 0개 이상임

{n,m} : 앞 문자가 n개 이상 m개 이하. {0,1} 은 ?와 같은 의미다.

{n,} : 앞 문자가 n개 이상. 위의 형태에서 m이 생략된 형태이다. {0,} 이면 *와 같고 {1,} 이면 +와 같은 의미이다.

() : 하나의 패턴구분자 안에 서브 패턴을 지정해서 사용할 경우 괄호로 묶어주는 방식을 사용한다.

 

 

 

패턴변경자

패턴구분자가 끝나면 그 뒤에 쓰는 것으로, 패턴에 일괄적으로 변경을 가할 때 사용한다. 

 

i : 패턴을 대소문자 구분 없이 검사한다. 이 변경자를 사용할 경우 [a-z]로만 검사해도 자동으로 [a-zA-Z]와

   같은 기능을 하게 된다. 가장 많이 쓰이는 패턴.

s : 임의의 한 문자를 가리키는 . 메타 문자에 개행 문자(\n)도 포함시키도록 한다.

    이 변경자를 사용하면 .이 줄바꿈도 임의의 한 문자로 취급하여 찾는다.

m : 주어진 문자열에 줄바꿈이 있을 경우, 여러 줄로 취급하여 검사한다.

    (줄바꿈이 없다면 써도 의미가 없다.) 원래 정규표현식을 쓸 때 줄바꿈은 무시되는데,

    이걸 사용하면 줄바꿈을 적용해서 검사한다. 그리고 ^은 한 줄의 시작, $는 한 줄의 끝으로 의미가 달라진다.

x : 공백 문자를 찾지 않고 무시해 버린다. 단, 이스케이프(역슬래쉬하고 같이 쓸 경우)하거나

   문자 클래스 안에 있을 경우에는 이걸 써도 공백을 찾는다.



출처: https://cityattack.tistory.com/64 [밝은 세상]

반응형