2012-04-24 5 views
2

я пытаюсь заменить строку, которая сопоставляется смотри пример сильфонаЯ хочу, чтобы заменить шаблон, который сопоставляется

<?php 
    $str="this is going to bold [[this]]"; 
    echo preg_replace("/[[(.*)]]+/i","<b>$1</b>",$str); 
?> 

Так что вывод будет выглядеть следующим образом

это будет смелым это

Edit:

<?php 
    $str="bhai bhai *that* -wow- perfect"; 
    $find[0]="/*(.+)*/i"; 
    $find[1]="/-(.+)-/i"; 
    $rep[0]="<b>$1</b>"; 
    $rep[1]="<i>$1</i>"; 
    echo preg_replace($find,$rep,$str); 
?> 

Это показывает предупреждение

Предупреждение: preg_replace() [function.preg замены]: Компиляция не удалось: ничего, чтобы повторить по смещению 0 в C: \ XAMPP \ HTDOCS \ page.php в строке 7

+0

'[]' являются специальными символами в PCRE и поэтому должны быть экранированы. Кроме того, вы можете использовать не жадную группу. '(. *?)' в противном случае вы столкнетесь с некоторыми смелыми проблемами смещения в будущем. – Corbin

+0

i изменено на это ... echo preg_replace ("/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ выход .......... это будет выделено жирным шрифтом –

+0

@ user1331534 Проверьте мой ответ. –

ответ

4

Попробуйте это:

<?php 
    $str="this is going to bold [[this]]"; 
    echo preg_replace("/\[\[(.+)\]\]+/i","<b>$1</b>",$str); 
?> 

Выход:

это будет смелым этот


Подсказка:

[ и ] символы считаются специальный, так что вы будете иметь, чтобы избежать их (как: \[, \]).


UPDATE:


<?php 
    $str="bhai bhai *that* -wow- perfect"; 
    $find[0]="/\*(.+)\*/i"; 
    $find[1]="/\-(.+)\-/i"; 
    $rep[0]="<b>$1</b>"; 
    $rep[1]="<i>$1</i>"; 
    echo preg_replace($find,$rep,$str); 
?> 
+0

В чем разница между (. +) И (. *)? –

+2

@ user1331534 '+' указывает, что шаблон должен быть сопоставлен ONE-or-more раз, а '*' указывает, что он должен быть сопоставлен ZERO или больше раз (что означает, что он может не соответствовать чему-либо). –

+1

@ user1331534 ** Пример * (из Википедии) *: ** 'ab * c' соответствует« ac »,« abc »,« abbc »,« abbbc »и т. Д. 'ab + c' соответствует« abc »,« abbc »,« abbbc »и т. д., но не« ac » –

0

Попробуйте это для размера

<?php 
    $str="this is going to bold [[this]]"; 
    echo preg_replace("/(?:\[\[)(.*?)(?:\]\])/i","<b>$1</b>",$str); 
?> 
0

Вам нужно бежать квадратные скобки регулярного выражения. Окончательное выражение должно выглядеть примерно так:

echo preg_replace('/\[\[(.*?)\]\]/im', '<b>$1</b>', $str); 

квадратные скобки специальные символы, используемые для определения набора символов и, таким образом, должны быть экранированы, если вы хотите, чтобы соответствовать их буквально.

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