2009-11-27 10 views
0

La chaîne brute est comme ceci:modèle Regex aide voulait

{\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 
} 

Quel est le modèle de regex qui remplacerait toutes les balises RTF suivant une barre oblique avec « » chaîne vide, sauf \unumbers? Le résultat devrait ressembler à:

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

J'ai essayé "\\\\\\w+|\\{.*?\\}|\\}" qui élimine tout ce qui suit une barre oblique inverse et toutes les accolades. La partie manquante est quelque chose comme \\!(\\\\u)

Répondre

0

Essayez de faire correspondre les étiquettes que vous souhaitez conserver en premier et les remplacer.

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

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

Je voulais dire les remplacer par eux-mêmes. La première correspondance '(\\\ u ​​[\ d] +)' est la balise \ u que vous voulez conserver, qui est le $ 1 de remplacement. – Rob

+0

désolé confus un peu: si je code en C++ et pas très familier avec PHP ou Perl que beaucoup. – val

+0

ah, Ok. merci Rob, je vais essayer – val