2009-11-27 3 views
0

Необработанная строка выглядит так:Regex модель требуется помощь

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\froman\fcharset0 Times New Roman;}{\f1\fnil\fcharset0 MS Shell Dlg 2;}} 
\viewkind4\uc1\pard\sb100\sa100\f0\fs24\u30340?\u27494?\u35013?\u20998?\u23376?\u65292?23\u26085?\u22312?\u33778?\u24459?\u23486?\u21335?\u37096?\u30340?\u39532?\u20140?\par 
\pard\f1\fs17\par 
by: lena (11/26/09)\par 
\par 
} 

Что такое шаблон регулярного выражения, которое будет заменить все тег в формате RTF после косая черта с «» пустой строкой, кроме \unumbers? Результат должен выглядеть следующим образом:

\u30340?\u27494?\u35013?\u20998?\u23376?\u65292?23\u26085?\u22312?\u33778?\u24459?\u23486?\u21335?\u37096?\u30340?\u39532?\u20140? 
by: lena (11/26/09) 

Я попытался "\\\\\\w+|\\{.*?\\}|\\}", который удаляет все, что следует за обратной косой черты и все фигурные скобки. Недостающая часть - это что-то вроде \\!(\\\\u)

ответ

0

Попробуйте найти теги, которые вы хотите сохранить первым и заменить их.

# php 
$str = preg_replace('/(\\\u[\d]+)|\\\+[\w\?]+|{.*?}/', '$1', $str); 

# perl 
$str =~ s/(\\\u[\d]+)|\\\+[\w\?]+|{.*?}/$1/g; 
+0

Я имел в виду замену их на себя. Первое совпадение '(\\\ u ​​[\ d] +)' - это теги \ u, которые вы хотите сохранить, что является заменой $ 1. – Rob

+0

извините путать немного: если я кодирую в C++ и не знаком с php или perl, что много. – val

+0

ах, хорошо. спасибо, Роб, я попробую это – val