2014-12-28 5 views
1

나는 이름 목록을 가지고 있으며 그 이름의 특정 부분을 굵게 표시하기 위해 preg_replace를 사용하고 있습니다. str_replace를 사용하고 있었지만 제한이 필요했습니다.Preg_replace 패턴 변수

그러나 "구분 기호는 영숫자 또는 백 슬래시가 아니어야합니다."오류가 발생합니다. 몇 가지 연구를 한 후에 패턴 변수에 슬래시가 없기 때문에 상황이 발생했다는 것을 알게되었습니다.

그러나 나는 노력해 왔지만 제대로 할 수는 없으며 나는 내 모습을 찾지 못했습니다. 도와 줘서 고마워.

while($row = $result->fetch_array()) { 
     $name = $row['name']; 

    $array = explode(' ',trim($name)); 
    $array_length = count($array); 

    for ($i=0; $i<$array_length; $i++) { 
     $letters = substr($array[$i], 0, $q_length); 
     if ($letters = $q) { 
     $bold_name = '<strong>'.$letters.'</strong>'; 
     $final_name = preg_replace($letters, $bold_name, $array[$i], 1); 
     $array[$i] = $final_name; } 
    } 
+0

가능한 복제본 [구분 기호는 영숫자 또는 백 슬래시 및 preg \ _match가 아니어야합니다] (http://stackoverflow.com/questions/7660545/delimiter-must-not-be-alphanumeric-or-backslash-and-preg- 일치) – HamZa

답변

2

정규식에는 구분 기호가 필요합니다. 예를 들어, ~를 사용하여 :

$final_name = preg_replace('~'.$letters.'~', $bold_name, $array[$i], 1); 

당신은 the documentation for PCRE delimitersthe documentation for preg_replace에서 자세한 내용을보실 수 있습니다. 워드 프로세서

는 :

PCRE 함수를 사용하여,이를 를 자로 패턴 봉입 할 필요가있다. 구분 기호는 영숫자가 아니며 백 슬래시가 아닌 공백이 아닌 문자가 될 수 있습니다.

자주 사용되는 구분 기호는 슬래시 (/), 해시 기호 (#) 및 물결표 (~)입니다. 다음은 유효한 구분 된 패턴의 예입니다. 그냥 preg_replace의 첫 번째 매개 변수에 간단한 구분 기호를 추가 할 필요가

+0

죄송합니다. 잘못된 행이 복사되고 편집되었습니다. 내 편집을 참조하십시오. –

+0

대단히 감사합니다. 결국 매우 간단했습니다! – Penny

+0

도와 줘서 기쁩니다! 답변을 선택하는 것을 잊지 마십시오! :) –

0

%[a-zA-Z0-9_-]%

+php+

#^[^0-9]$#

/foo bar/

.

앞으로 추가 (또한 사용할 수는 있지만 다른 구분 기호.) 당신의 $letters에 슬래시가 질문에서 언급 한 바와 같이

$final_name = preg_replace('/'.$letters.'/', $bold_name, $array[$i], 1); 

가, 대답은 Delimiter must not be alphanumeric or backslash 있다는 그 자체에있다.