2011-03-25 121 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