2013-06-26 2 views
3

Столбец в базе данных, в которой я работаю, содержит строки RTF, я хотел бы удалить их с помощью PHP, оставив только предложение между ними.Strip RTF строки с PHP - Regex

Это база данных MS SQL 2005, если я правильно помню.

Пример вида строк тянули из базы данных (нужно больше, дайте мне знать, все остальные похожи):

{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Tahoma;}} 
\viewkind4\uc1\pard\lang1033\f0\fs17 ASSEMBLE COMPONENTS AS DETAILED ON DRAWING.\lang2057\fs17\par 
} 

Я хотел бы, чтобы быть зачищены только вернуться:

ASSEMBLE COMPONENTS AS DETAILED ON DRAWING. 

Теперь мне удалось удалить символы в ASP.NET для предыдущего проекта, однако я хотел бы сделать это с помощью PHP. Вот регулярное выражение, которое я использовал в ASP.NET, который работает безотказно может добавить:

"(\{.*\})|}|(\\\S+)" 

Однако, когда я пытаюсь использовать то же самое выражение в PHP с preg_replace не раздеть половину символов.

Любые гуру регулярных выражений?

+3

Добавить разделители '$ string = preg_replace (" # (\ {. * \}) |} | (\\\ S +) # "," ", $ string);' – HamZa

+0

Хм, похоже, исправили ошибку спасибо, однако он по-прежнему оставляет кучу строк RTF, добавленных к строке, возможно, она не работает точно так же, как ASP.NET. – Charlie

+0

Я знаю, что он не делает то, что вы думаете. В любом случае вы также должны использовать '\\\\ S +' вместо '\\\ S +' – HamZa

ответ

4

Используйте этот код. он будет работать нормально.

$string = preg_replace("/(\{.*\})|}|(\\\S+)/", "", $string); 

Обратите внимание, что я добавил '/' в начале и в конце '/' в регулярном выражении.

+0

'i' бесполезно здесь – HamZa

+0

@HamZa да, вы правы. просто отредактировал код. – JazyK

+1

Возврат: \ viewkind4 \ uc1 \ pard \ f0 \ fs17 АССАМБЛЕОННЫЕ КОМПОНЕНТЫ КАК ПОДРОБНОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ.\ fs17 \ par Не совсем. Я должен добавить, что на нем было около 20 ведущих и конечных пробелов. – Charlie