티스토리 뷰

웹 해킹/웹 공부

정규표현식

삼전동해커 2020. 7. 25. 11:09

정규표현식이란?

문자열에서 특정한 규칙을 가지는 문자열의 집합을 찾아내기 위한 검색 패턴.

검색 패턴으로 문자열 검색이나 교체등의 작업에 사용할 수 있다.

php에는 2가지의 정규 표현식이 있다.

1.POSIX

2.PCRE


POSIX이 배우기 쉽고 실행속도가 빠르다.

PCRE는 POSIX 정규 표현식을 확장했기 때문에 더 강력하고 유연하게 동작.


[POSIX]

정규표현식 리터럴


문법은

 /검색패턴/플래그

 형식이다.


슬래시(/)로 시작해서 슬래시(/)로 끝난다.


preg_match함수

해당 문자열에서 전달 받은 정규표현식과 일치하는 패턴을 검색한다.

preg_match($pattern,$subject [,$matches]); //[ ]는 선택사항이다.

첫 번째 인자로 정규표현식에 해당하는 패턴을 받고

두 번째 인자로 검색할 문자열을 전달한다.

검색 결과는 배열로 반환되며 세 번째 인자로 반환값이 직접 전달되기도 한다.


preg_match함수는 정규 표현식에 해당하는 패턴이 검색되면, 더는 검색하지 않고 검색을 중단한다.

일치하는 패턴이 존재하면 1을 반환하고, 존재하지 않으면 0을 반환.


preg_match_all함수

문자열에서 찾을 패턴에 맞는 모든 패턴을 리턴해줌.


※preg_match와의 차이점은 preg_match는 한개만 반환하지만 preg_match_all은 모든 패턴을 리턴한다.


단순 패턴 검색

정규표현식을 사용하여 단순한 문자열을 검색하고자 할 때는 문자열을 직접 나열하면 된다.

ex)

$subject="간장 공장 공장장은 강 공장장이고, 된장 공장 공장장은 장 공장장이다.";


if(preg_match('/공장/',$subject){

echo "공장있음";

}else { echo "공장 없음";}


플래그

찾을 패턴을 작성할 때 플래그를 사용하여 기본 검색 설정을 변경할 수 있다.

문자 

의미 

 i

검색 패턴을 비교할 때 대소문자를 구분하지 않도록 설정

 g

검색 패턴을 비교할 때 일치하는 모든 부분을 선택하도록 설정

 m

검색 패턴을 비교할 때 여러 줄의 입력 문자열을 그 상태 그대로 여러 줄로 비교하도록 설정.

 y

대상 문자열의 현재 위치부터 비교를 시작하도록 설정.

 u

대상 문자열이 utf-8로 인코딩된 것으로 설정.


ex)

$subject="ABabaabbAABB";

$preg=preg_match("/AB/gi",$subject);  //일치하는 모든 부분을 대소문자 구분없이 출력

echo $freg; //AB,ab,AB 출력




정규 표현식

문자 

의미 

예제 

 .

 임의의 한 문자

  /.ap/ -> aap bap cap @ap %ap

 *

 바로앞의 문자를 의미하고 해당문자가 0번이상 존재하는 문자

 /a*p/ -> p ap aap aaap

 +

 바로 앞의 문자가 1번 이상 나타날 경우를 검색

s+k  -> sk ssk sssk

 바로앞의 문자를 의미하고 0번 또는 1번만 나타나는 경우

 ex?e -> ee exe

 ^

 바로앞의 문자를 의미하고 그 문자로 시작됨

^the -> the boy

 $

 해당문자로 끝나는 것을 의미

 $bc ->abc

 []

 대괄호 안의 문자열중 하나의 문자를 의미

 [a-z] -> 알파벳 중 하나

 {}

 앞에 있는 문자 또는 문자열의 개수

 a{2,4}B(a가 2번이상 4번 이하로 나타나는 경우) -> aaB aaaB aaaaB

 ()

 괄호 안의 문자열을 그룹화

 A(BC){2} A뒤에 BC가 두번이상나타나는 문자열

 |

 or 연산자, 여러개를 검색할 수 있다

 preg_match_all('/abc|def|ghi/',$subject);



※정규표현식의 특수문자를 문자자체로 인식되게 사용할 경우에는 \를 붙임.


<p class="no_today"></p>

$rex="/\<p class=\"no_today.+\">(.+)\<\/p>/";



<em class="no_up">~~</em>

$rex = "/\<em class=\"no_.+\"\>(.*)\<\/em\>/";








'웹 해킹 > 웹 공부' 카테고리의 다른 글

[PHP] mysql_fetch_array,row  (1) 2020.08.04
[php] $_SERVER함수  (0) 2020.07.31
소켓(socket)이란  (0) 2020.07.23
robots.txt란?  (0) 2020.07.23
구글 도크  (0) 2020.07.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함