삽질의 현장/- PHP

[삽잡이::php] php에서도 정규표현식을 이용할 수 있다구~

shovelman 2016. 6. 16. 00:03



이전에도 언급했지만

Web 단에서 프로그래밍을 하다보면 

문자열들 사이에서

내가 원하는 것들을 쪽쪽 뽑아먹을 수 있어야합니다.


마치 모기처럼 말입니다. 

뭐라고~ 이제 곧 우리를 찾아올 불청객인 모기!?



그렇습니다! 여러분은 코드를 작성하며 모기가 된다고 생각하셔야합니다~!!!


내가 모기가 될테니 내 피는 가져가지 마렴 모기야~! 


 

(출처_ 외국 블로그)



죄송합니다...

아무튼 본론으로 들어가서!


php에서는 preg_match() 라고 하는 메서드가 존재합니다.

해당 메서드는

정규표현식을 인자로 받고 다른 인자로 받은 문자열에 매칭시켜 

결과 값을 배열로 저장하게 됩니다.


PHP 메뉴얼에가서 확인해보겠습니다.



(출처_ PHP)


간략하게 설명해드린다면,

$pattern 이라는 탐색을 위한 문자열(정규 표현식)과

$subject 이라는 입력 문자열을 매칭(matching)시켜서 

검색 결과를 $matches 에 채워넣습니다.


여기서 잘 보셔야할 점은 PHP 메뉴얼에도 나와있듯이 

&$matches 라는 것입니다.


C / C++ 공부를 해보셨으면 아시겠지만,

그렇습니다. call by reference입니다.

주소를 통해 직접 접근하여 데이터를 수정하는 것이지요.


따라서 return과 별개로 결과값이 저장되는 것입니다.

return은 int형으로 0, 1, FALSE 이 셋으로 나뉜다고 하네요~


여기서 패턴에 매칭된 결과가 저장되어있는 

$matches 를 조금 더 살펴보자면,


우선 배열입니다.

그리고, 0번째 즉, 첫 인덱스에는 

전체 패턴에 대한 내용이 들어갑니다.


그리고 그 다음부터는

매치된 문자열의 시작 위치들을 저장하게 되는데요!

이를 매뉴얼에서는 서브 패턴이라고 하는군요~ 


한번 확인해보겠습니다.


1
2
3
4
5
6
$sString = 'SAP_9999A_삽잡이';
preg_match('/SAP_[0-9]+(A|D|C|U)_(.*)/', $sString, $aMatches);
 
echo "<pre>";
print_r($aMatches);
echo "</pre>";
cs


자자... 

'SAP_9999A_삽잡이' 라는 문자열을 


'/SAP_[0-9]+(A|D|C|U)_(.*)/'

요렇게 생긴 정규 표현식와 패턴 매칭하여 

매칭된 값들을 추출할 것입니다.




자 이렇게 추출된 값들을 확인할 수 있습니다.


정규 표현식도 알고~

문자열도 가지고 놀고~


익숙하게 사용할 수 있으면 아주 좋겠지요!?


굳~