2014-12-28 2 views
1

У меня есть список имен, и я использую preg_replace, чтобы сделать определенную часть этих имен жирным. Я использовал str_replace, но мне был нужен лимит.Preg_replace Pattern Variable

Однако я получаю сообщение об ошибке «Делитель не должен быть буквенно-цифровым или обратным слэшем». После некоторых исследований я узнал, что это происходит, потому что мне не хватает косой черты в моей переменной шаблона.

Однако я пытался, и я не могу понять это правильно, и я не нахожу такой пример, как мой. Спасибо за помощь.

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 delimiters и the documentation for preg_replace.

Из документов:

При использовании функции PCRE, требуется, чтобы шаблон приложен ограничители. Разделителем может быть любой символ, не являющийся буквенно-цифровым, без обратного слэш-символа.

Часто используемые разделители - это косые черты (/), знаки хеша (#) и тильды (~). Ниже приведены все примеры действительных шаблонов с разделителями.

/foo bar/

#^[^0-9]$#

+php+

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

+0

К сожалению. Скопирована и отредактирована неправильная строка. См. Мое редактирование. –

+0

Большое спасибо, это было очень просто! – Penny

+0

Рад помочь! Не забудьте выбрать ответ! :) –

0

вам просто нужно добавить простой разделитель к первому параметру preg_replace.

Добавить вперед слэши к вашим $letters (Однако другие разделители могут быть также использованы.)

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

Как вы упомянули в вопросе, ответ сам по себе, что Delimiter must not be alphanumeric or backslash.

Смежные вопросы