2013-04-27 4 views
-2

У меня есть строка, как <div><center>[content]</center></div>. «[content]» заменяется скриптом php, который вставляет содержимое из базы данных. Я решил эту проблему, используя функцию str_replace. Теперь я хочу изменить свой скрипт следующим образом: если я набираю [content], он должен его заменить. Если я напишу [[контент]], он ничего не должен делать. Я думал об использовании регулярных выражений, но все, что я пытаюсь -> Это не работает. Если вы меня не понимаете, просто вспомните C#, java, ...: Если я наберу \ n, это новая строка. Если я набираю \ n его "\ n". Я был бы очень благодарен, если бы кто-нибудь мог помочь.PHP Regex Replace

Взгляните на этот пример:

"aa[content]aa" -> aaMYCONTENTaa 
"aa[[content]]aa" -> aa[[content]]aa 
"aa[[[content]]]aa" -> aa[MYCONTENT]aa 
+5

Покажите нам, что вы пробовали до сих пор –

+2

Шаблон двигателя? Может быть, использовать существующий? –

+0

** Попробуйте написать что-то самостоятельно **, а затем, если это не сработает, принесите его нам, чтобы помочь вам. Вы начинаете, мы помогаем. Мы не пишем его для вас. Покажите нам фактический код, который вы пробовали, а затем мы можем вам помочь. Скорее всего, вы получите довольно близко к ответу, если сначала попробуете сами. –

ответ

0

Просто замените «> [содержания] <» с «> что вы хотите <»

1

Чистое решение регулярное выражение можно, но вы направляетесь на опасный путь создания собственного шаблонного двигателя. Есть несколько решений, доступных (smarty является наиболее популярным)

Объяснение: [^\\[]? совпадает все, кроме [ характера, не включая ничего. Это означает, что [[content]] не соответствует.

1

EDIT:

код заменит [content] со значением $replace_content_with, если он не имеет [ до или ] после

$original = '<div><center>[content]</center></div>'; 
$replace_content_with = 'my new content'; 
$pattern = '/([^\[])\[content\]([^\]])/i'; 
$new_data = preg_replace($pattern, '\1'.$replace_content_with.'\2', $original); 
echo $new_data; //print <div><center>my new content</center></div> 

отметить, что если содержание замены включают \[SOME NUMBER] в нем - он не может работать, как Ожидается

+0

нет. Я его всегда заменяю, но не тогда, когда есть два «[». -> см. отредактированный пост –

+0

отредактировал мой ответ –