2008-09-30 53 views
2

我有一個腳本,需要用戶上傳RTF文檔,並將某些人的數據合併到信件(姓名,地址等)中,併爲多人執行此操作。我合併了信件內容,然後將它與下一個合併信件內容合併爲所有人的記錄。在PHP(REGEX)中連接RTF文件

情感上,我將一個單獨的RTF文檔合併到自己中,以便合併該字母所需的多個人員記錄。但是,我需要先刪除關閉的RTF標記並打開每個合併的RTF標記,否則RTF將無法正確呈現。這聽起來像是一個正則表達式的工作。

從本質上講,我需要一個正則表達式,將刪除整個字符串:

} \ n \頁面ANYTHING \相提並論

例,此正則表達式會匹配這樣的:

crap 
} 
\page{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}} 
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 September 30, 2008\par 
more crap 

,所以我可以使它成爲:

crap 
\page 
more crap 

RegEx是RegEx最好的方法嗎?

更新:爲什麼我必須使用RTF?

我想讓用戶上傳一個表單字母,然後系統將用它來創建合併的字母。由於RTF是純文本,所以我可以在代碼中很容易地做到這一點。我知道,RTF是一種規範的災難,但我不知道其他好的選擇。

回答

2

我會質疑在這種情況下使用RTF。我並不完全清楚自己想要做什麼,因此我不一定會提出更好的建議,但如果您可以嘗試更廣泛地解釋您的項目,也許我可以提供幫助。

如果這真的是你想要去的儘管這樣,這個表達式給了我給你輸入正確的輸出:

$output = preg_replace("/}\s?\n\\\\page.*?\\\\par\s?\n/ms", "\\page\n", $input); 
+0

我想我會重新發布這是一個更好的問題。謝謝你的幫助。 – Justin 2008-10-02 16:23:59

1

對此我只能說ICK ICK ICK。不過,rcar的混亂可能會起作用,除非出現一些奇怪的邊緣情況,即RTF實際上沒有以這種形式結束,或者文檔範圍的樣式包含完全混淆格式的重要信息,或許多其他失敗模式。