regexp 란?

like 검색과는 달리 정규식을 이용한 검색 방식을 말한다.
regexp는 우리에게 like보다 좀 더 다양한 검색을 할 수 있도록 도움을 준다.
(관련 URL : http://dev.mysql.com/doc/refman/5.1/en/regexp.html )


regexp 를 이용한 검색의 예제

select * from test where name regexp '가'
name 필드에 '가'를 포함한 모든 레코드를 출력한다.
(select * from test where name like '%가%') 의 쿼리와 동일하다

select * from test where name regexp '가|나|다|라'
name 필드에 가 또는 나 또는 다 또는 라 를 포함한 레코드를 모두 출력한다.
(select * from test where name like '%가%' or name like '%나%' or name like '%다%' or name like '%라%') 쿼리와 동일

select * from test where name regexp '[가-힇]'
name 필드에 한글이 포함된 모든 레코드를 검색한다.

select * from test where name regexp '^[가-힇]+$'
name 필드에 한글로만 구성된 모든 레코드를 검색한다.


regexp 정규식 기호에 대한 간단한 소개

. : 문자 하나를 나타낸다.
* : 앞에 나온 문자의 0개 이상 반복을 나타낸다.
^ : 문자열의 처음을 나타낸다.
$ : 문자열의 끝을 나타낸다.
[.] : 괄호 안의 문자열 일치를 확인한다.
{.} : 반복을 나타낸다.
| : or 를 나타낸다.

* 참고사항
정규식의 검색을 이용할때 절대 사용자에게 정규식 기능을 제공해선 안된다.
각 종 오류를 포함할 수 있고 sql 인젝션에 취약해지기 때문에
정규식의 검색을 개발자가 미리 정한 테두리 안에서 행해져야 한다.