2011-12-08 2 views
-4
나는 다음 시도 할

:PHP PCRE 정규식 컴파일 오류

$searchText = preg_quote($searchText, '/'); 
$remarks = preg_replace('/'.$searchText.'/i', '<span class="searchText">$0</span>', $remarks); 

내가받을 다음과 같은 오류 메시지가

에서 0

나는 천국을 상쇄 너무 큰

정규 표현식 ' 이것이 무엇을 의미하는지, 왜 그것을 얻고 있는지, 어떻게 고쳐야 하는지를 알지 못합니다. 나는이 오류 메시지를 Google에서 찾을 수없는 php.ini 설정에 대한 참조를 얻습니다.

+2

그래서'$ searchText'에 무엇이 있습니까? – nickb

+3

'too large'은 꽤 명백한 메시지이며 현대 언어의 일반적인 문구입니다. 실마리가 없습니까? –

+0

분명히 당신의 정규식이 너무 큽니다. 그 정규식이 무엇인지 보지 않고서는, 우리는 당신을 도울 수 없다. –

답변

3

정규식 크기 제한은 65539 (예, 65536이 아님)입니다. 한도를 초과했습니다.

는 여기를 참조하십시오 : 당신을위한 사용자 검색이 단어를 강조하기 위해 노력하고 같은 이전 질문에서 http://www.pcre.org/pcre.txt

SIZE AND OTHER LIMITATIONS 

     There are some size limitations in PCRE but it is hoped that they will 
     never in practice be relevant. 

     The maximum length of a compiled pattern is 65539 (sic) bytes if PCRE 
     is compiled with the default internal linkage size of 2. If you want to 
     process regular expressions that are truly enormous, you can compile 
     PCRE with an internal linkage size of 3 or 4 (see the README file in 
     the source distribution and the pcrebuild documentation for details). 
     In these cases the limit is substantially larger. However, the speed 
     of execution is slower. 
+1

나를 위해, 문장은 "실제로는 관련성이 없다는 희망이 있습니다." "이 제한을 두드리면 무언가 잘못하고 있음을 의미합니다." – nickb

1

이 보인다. 그렇다면 이것을 할 수있는 정규식이 필요하지 않습니다. 이렇게 할 수 있습니다.

$remarks = str_replace($searchText, '<span class="searchText">' . $searchText . '</span>', $remarks); 

단어 내의 문자열을 강조 표시합니다. 전체 단어 만 일치시키려는 경우 내 대답을 업데이트 할 수 있습니다.

+0

내가 바꾸려는 이유는 내가 preg_replace()를 한 이유입니다. 대문자와 소문자를 구별하지 않고 표시되는 텍스트의 대/소문자를 변경합니다. str_replace()를 str_ireplace()로 변경하여 사용자가 어떤 텍스트로 입력했는지에 관계없이 텍스트를 일치시키고 강조 표시 할 수 있지만 사용자에게 반환 된 결과의 경우는 사용자가 입력 한 모든 경우입니다. – user39653

관련 문제