쉬어가는 페이지 > 정규표현식은 왜 알아야 하고 필요한가?

정규표현식을 모르거나 사용안한다고 하여도 프로그램을 하는 데는 전혀 지장이 없습니다.
클래스를 모른다고 프로그램이 안되지 않는 것처럼, 정규표현식도 그렇습니다.
프로그램은 문법 과 제어구조만 알아도 다 만들수 있습니다.

단, 생산성과 효율성의 문제에서 다른 것들을 익히고 알아야 할 필요가 있습니다.

많이 쓰는 부분을 정리해서 함수로 만들고,
그런 함수들을 모아서 새로운 기능 정의와 함께 클래스를 만들고,
또 그런 클래스를 모아서 또 새로운 여러가지 추가와 함께 패키지 형태로 만들고........

이렇게 하는 이유는 매번 반복하는 부분들에 대해서 빠르고 쉽게 재사용하여 생산성과 효율성을 높이기 위해서라고 저는 개인 적으로 생각합니다.
물론, 부가적으로 성능 개선과 같은 잇점도 발생 할수도 있습니다.

각설하고. 

아래와 같은 정규표현식을 사용하는 문제가 있습니다.
문제 > 입력받은 문자열에서 알파벳 소문자 중 하나가 포함되어 있다면 그것을 출력하라.

풀이>
<?php

$string = '12345j6789';

if (preg_match("/[a-z]/", $string, $matches)) {

    echo $matches[0];
}
else {

    echo $string . ' 에서 알파벳 소문자가 발견되지 않았습니다.';
}

?>

이것을 정규 표현식을 사용하지 않고 구현하라 라고 한다면........
아주 간단한 정규 표현식임에도 불구하고, 이런 문제를 평소에 접해보지 않은 사람이라면 잠시 헤멜 수도 있습니다.
방법이야 여러가지가 있겠지만 저는 다음 두가지 방식으로 한번 풀어봤습니다.

1. php 의 문자열 특성을 이용한 풀이
<?php

$string = '12345j6789';

$string_length = strlen($string);
$range = range('a', 'z');

$find = '';
$k = 0;
while($k < $string_length){

    if (in_array($string[$k], $range)) {

        $find = $string[$k];
        break;
    }

    $k++;
}

if (!empty($find)) {

    echo $find;
}
else {

    echo $string . ' 에서 알파벳 소문자가 발견되지 않았습니다.';
}

?>

2. php 의 substr 을 이용한 풀이
<?php

$string = '12345j6789';

$string_length = strlen($string);
$range = range('a', 'z');

$find = '';
$k = 0;
while($k < $string_length){

    if (in_array(substr($string, $k, 1), $range)) {

        $find = substr($string, $k, 1);
        break;
    }

    $k++;
}

if (!empty($find)) {

    echo $find;
}
else {

    echo $string . ' 에서 알파벳 소문자가 발견되지 않았습니다.';
}

?>

보시는 바와 같이 프로그램이 다소 복잡해졌습니다.
알파벳 소문자 하나를 찾기 위해서, 정규표현식으로는 간단하게 패턴만 만들어줌으로서 그과정을 모두 대신했지만,
정규표현식을 사용하지 않으면, 알파벳 소문자를 찾기 위한 과정이 처리과정에 포함되어야 합니다.


이렇게 간단한 것도 이정도 차이가 나는데
이전 내용에서 예제로 들었던 

<?php

$strings = Array();
$strings[] = 'dbckdghk1@nate.com';
$strings[] = "DBCKDGHK2@yahoo.co.kr";
$strings[] = "dbckdghk1@dbckdghk2@naver.com";
$strings[] = 'dbckdghk1.dbckdghk2@naver.com';
$strings[] = "DBCKDGHK@i-boss.co.kr";

foreach($strings as $string){

    //이메일은 @ 를 기준으로 아이디와 서버로 구분된다. 아이디에는 @ 와 . 은 올수 없으며 4자이상이다. 서버에는 알파벳 소문자와 숫자 - .으로 3 자 이상으로 구성 되어있다.
    if (preg_match('/^[^@.]{4,}@[0-9a-z-.]{3,}$/', $string, $matches)) {

        echo '<font color="blue">' . $string . ' 은 정상적인 이메일입니다.</font><br />' . PHP_EOL;
    }
    else {

        echo '<font color="red">' . $string . ' 은 정상적인 이메일이 아닙니다.</font><br />' . PHP_EOL;
    }
}

?>

이런 것을 정규표현식을 사용하지 않고 직접 구현하려면, 음......
이것만으로도 적지 않은 양의 라인수를 가진 프로그램이 된다는 것은 직감적으로도 알수 있습니다.



아무튼.......
제 말의 요지는 프로그램 이란 자체도 일일이 손으로 계산하고 처리하던 것을 생산성 과 효율성을 위해 만들어진 것처럼
프로그램 내에서도 생산성과 효율성은 배제 할수 없는 부분 이라는 것입니다.

그중에 이 정규표현식은 특히나 더 큰 생산성과 효율성을 제시하기 때문에, 반드시 알고 있어야 할 프로그램적인 소양 같은 것이라고 저는 생각합니다.



이상, 정규표현식을 왜 알아야 하고 필요한지 저의 생각이었습니다.
감사합니다.
|

댓글 14개

좋은 강좌 감솨합니다!!
감사합니다.
좋은강좌군요.. 이번기회에 정규식을 제대로 공부해야 겠습니다. 감사해요..
네에 고맙습니다.
암호문이 풀려가는 중이네요. ^ ^ 감사!
네에 감사합니다.
정규식을 왜 사용해야 하느지 이젠 알겠네요....^^
네에 ㅎㅎ 감사합니다.
정규식을 좀 배우다 보니까
꼭 프로그램 뿐만 아니라 문서라던가 검색할때도 엄청 유용하겠더라구요...
열심히 공부해서 자유자재로 쓸 수 있게 되었으면 좋겠네요...
좋은 강좌 감사합니다 ^^
건승을 기원합니다.
그누보드 소스 분석하다가 정규표현식나오면 일단 뒤로 미뤄두곤 했었는데, 이제야 들여다 보내요.
좋은 강의 감사합니다.
좋은 강의 감사합니다.
좋은 내용 감사합니다.
좋은 강좌를 게시해 주셔서 감사드립니다. ^^
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
12년 전 조회 6,184
12년 전 조회 2,802
12년 전 조회 3,141
12년 전 조회 1,138
12년 전 조회 924
12년 전 조회 2,022
12년 전 조회 6,035
12년 전 조회 1,636
12년 전 조회 4,867
12년 전 조회 1,103
12년 전 조회 4,269
12년 전 조회 1,412
12년 전 조회 1,255
12년 전 조회 1,842
12년 전 조회 1,470
12년 전 조회 740
12년 전 조회 702
13년 전 조회 2.1만
13년 전 조회 671
13년 전 조회 1,235
13년 전 조회 1,245
13년 전 조회 1,480
13년 전 조회 3,642
13년 전 조회 861
13년 전 조회 2,373
13년 전 조회 5,060
13년 전 조회 823
13년 전 조회 3,996
13년 전 조회 1,193
13년 전 조회 3,929
13년 전 조회 1,064
13년 전 조회 1,912
13년 전 조회 1,078
13년 전 조회 2,306
13년 전 조회 8,104
13년 전 조회 2,081
13년 전 조회 1,874
13년 전 조회 1,698
13년 전 조회 756
13년 전 조회 2,267
13년 전 조회 2,005
13년 전 조회 789
13년 전 조회 1,362
13년 전 조회 783
13년 전 조회 1,070
13년 전 조회 1,353
13년 전 조회 3,735
13년 전 조회 2,273
13년 전 조회 2,456
13년 전 조회 3,826
13년 전 조회 3,634
13년 전 조회 3,298
13년 전 조회 4,166
13년 전 조회 1,183
13년 전 조회 6,137
13년 전 조회 1,532
13년 전 조회 1,383
13년 전 조회 3,568
13년 전 조회 3,185
13년 전 조회 5,342
13년 전 조회 2,860
13년 전 조회 3,493
13년 전 조회 1,193
13년 전 조회 1,000
13년 전 조회 2,181
13년 전 조회 965
13년 전 조회 2,372
13년 전 조회 1,674
13년 전 조회 1,273
13년 전 조회 2,261
13년 전 조회 2,465
13년 전 조회 1,478
13년 전 조회 968
13년 전 조회 1,498
13년 전 조회 992
13년 전 조회 1,374
13년 전 조회 4,023
13년 전 조회 4,109
13년 전 조회 1,529
13년 전 조회 7,100
13년 전 조회 7,700
13년 전 조회 2,457
13년 전 조회 4,018
13년 전 조회 791
13년 전 조회 3,814
13년 전 조회 3,656
13년 전 조회 2,889
13년 전 조회 2,985
13년 전 조회 2,515
13년 전 조회 2,398
13년 전 조회 5,341
13년 전 조회 2,964
13년 전 조회 3,293
13년 전 조회 2,412
13년 전 조회 6,986
13년 전 조회 2,716
13년 전 조회 3,577
13년 전 조회 2,472
13년 전 조회 4,963
13년 전 조회 3,844
🐛 버그신고