2010-07-03 3 views
0

Здравствуйте, я пытаюсь сделать следующее:preg_replace вопрос

Скажем, у меня есть входной строки, как этот

{stackoverflow is a {cool|great} website|stackoverflow is the {best|greatest}}. {stackoverflow is for {cool|great} coders|stackoverflow is the {best|greatest} site for coders} 

Как я могу преобразовать его в следующем формате с помощью PHP

{stackoverflow is a [cool|great] website~stackoverflow is the [best|greatest]}. {stackoverflow is for [cool|great] coders~stackoverflow is the [best|greatest] site for coders} 

Я играю с preg_replace, но я не могу найти рабочее решение.

Чтобы подвести итог: Вложенный {должен быть превращен в [.

И | на первом уровне должен превратиться в ~.

Любые идеи?

С уважением

+0

Является ли это домашнее задание? Что у вас есть? –

+1

Есть ли общий шаблон, который вы имеете в виду? Ваш пример очень конкретный. – casablanca

+0

Ну, моя главная проблема - это гнездование. Если бы я мог получить массив или так с stackoverflow, это {cool | great} веб-сайт, а stackoverflow - это {best | great} как значения, было бы довольно легко исправить остальное. – brechtvhb

ответ

0

нет необходимости в preg_replace;)

$value = '{stackoverflow is a {cool|great} website|stackoverflow is the {best|greatest}}'; 
$map = array('{' => '[', '}' => ']', '~' => '|'); 
$value = '{' . str_replace(array_keys($map), array_values($map), substr($value, 1, -1)) . '}'; 
+0

'trim' удаляет слишком много'} 'в конце строки. – salathe

+0

Это не похоже на работу ... ли эхо на $ значения, и он выплюнул это: {StackOverflow это [прохладный | большой] сайт | StackOverflow является [лучшие | наибольший} – xil3

+0

это не ( – brechtvhb