2011-03-25 80 views
0

所以,我試圖將數據庫從Textpattern CMS遷移到更通用的東西。在引入圖片的文章中有一些特定於textpattern的命令。我想把它們變成通用的HTML圖像鏈接。目前,他們看起來像這樣在SQL文件:使用GREP/RegEx查找並替換字符串

<txp:upm_image image_id="4" form="dose" /> 

我希望把這些變成更多的東西是這樣的:

<img src="4.jpg" class="dose" /> 

我有一些運氣的TextWrangler做一些正則表達式的東西,但我很難過。如何找到&取代所有這些圖像路徑的任何想法?

編輯: 以供將來參考,這是我結束了在PHP做它輸出:

$body = $post['Body_html']; 
$pattern = '/txp:upm_image image_id="([0-9]+)" form="([^"]*)"/i'; 
$replacement = 'img src="/images/$1.jpg" class="$2"'; 
$body = preg_replace($pattern, $replacement, $body); 
// outputed <img src="/images/59.jpg" class="dose" /> 

回答

0

不知道你正在使用,但嘗試這個正則表達式的解決方案,工具:搜索此:

<txp:upm_image\s+image_id="(\d+)"\s+form="([^"]*)"\s*\/> 

,代之以這樣的:

<img src="$1.jpg" class="$2" /> 

請注意,這只是WO rks爲與您的示例具有相同形式的txp標記。如果txp標籤具有額外的屬性,或者它們的順序不同,它將會失敗。

+0

真棒,工作就像一個魅力。 – jpea 2011-03-25 17:03:50

1

我不會使用grep;它的sed你想

$ echo '<txp:upm_image image_id="4" form="dose" />' | sed -e 's/^.*image_id="\([[:digit:]]*\)".*form="\([[:alpha:]]*\)".*/<img src="\1.jpg" class="\2" \/>/' 
<img src="4.jpg" class="dose" /> 
$ 

,如果你的類有字母數字字符,使用[[:alnum:]]

(適用於MacOS的達爾文)

+0

如果字符串由一個txp標籤組成,此解決方案將起作用。如果有多個txt標籤與它們之間的東西,它會失敗。 – ridgerunner 2011-03-25 17:45:52