2012-05-04 4 views
2

사용자 입력을 받아서 mysql 필드를 검색하는 검색 기능을 수행 중입니다. 아이디어는 사용자가 검색 한 단어를 분할하여 각 용어를 찾습니다. 해당 분야는 입니다.MySQL에서 정규식 오류 (PHP에서 동일한 정규식 사용)

내가 일하는 순수 PHP 스크립트에서 복사 된 사용하고있는 정규식을 구축하는 데 사용되는 코드 (정규식은 PHP와 잘 작동하는 것 같다, 그래서 나는 정규식 맛의 차이 용의자)

이 경우에 저를 용서 이것은 명백한 문제이지만 여전히 정규 표현식에 대한 느낌을 얻습니다.

먼저 나는 당신에게 내가 실행 쿼리를 표시되고 오류가 나는

이 는 정규 표현식 "

SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo)(?=.*lambo).*$' OR `meta` REGEXP '^(?=.*gallardo)(?=.*lambo).*$') ORDER BY `changestamp` DESC 

에서

있어 오류 '반복 연산자 피연산자 무효'같은 오류를 제공

"SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$') ORDER BY `changestamp` DESC 
얻을

이 정규식을 컴파일하려면 "gallardo lambo"와 같은 사용자 입력을 받아들입니다 그리고이 PHP 프로 시저를 실행하십시오

if(isset($_GET['keyword'])){ 

     $searchterms = explode(' ',$_GET['keyword']); 

     $regstr = '^'; 

     foreach($searchterms as $i => $v) 
     { 
      if($v) 
       $regstr .= '(?=.*'.preg_replace('/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/', "\\$&", $v).')'; 
     } 

     $regstr .= '.*$'; 

    } 

는 내가 PHP의 preg_match()이 방법을 사용하는 경우, 작동하는 것 같다

"(`name` REGEXP '$regstr' OR `meta` REGEXP '$regstr')" 

같은 질의에 넣어.

어떤 통찰력이라도 있습니까? 내가 무엇을하고 있는지 전혀 모른다는 것을 자유롭게 말해주세요.

감사합니다.

+0

내 직감이 검색을위한 SQL 쿼리에 정규식을 사용하여 아마도 – Kristian

+1

을 slowwwww 하더군요'('PCRE 구문 =입니다? MySQL은 V8 정규식의 헨리 스펜서의 재 구현을 사용 – geekosaur

+0

는 http://stackoverflow.com/questions/39726749 참조하십시오. 가능한 해결 방법은 –

답변

5

MySQL 정규식은 PHP보다 제한적입니다. 역 참조 또는 미리보기를 지원하지 않습니다. the manual을 참조하십시오.

대신 fulltext search을 조사하고 싶을 수도 있습니다.