[已解决]请教一个替换html标签字符串的正则

[已解决]请教一个替换html标签字符串的正则

主要是替换指定id的html标签中的某个属性。

比如<img src="ad.jpg" id="logo" alt="用户标志" />,把id为logo的html标签的src属性替换为logo.png

难点在于:
<img src="ad.jpg" id="logo" alt="用户标志"></img>,这两种写法意义是一样的,但是字串中不确定是哪一种。
id属性与src属性的顺序是不定的。

对我的水平而言是在太难,无从下手了。请高手相助。

perl -ne 'if(/id="logo"/){$_=~s/src=".*?"/src="logo.png"/};print;' urfile

谢谢回复。
能否用一个正则表达式完成呢?另外,字符串不仅仅包含一个html标签,而是一个完整的html文档。
因为我用的是java库,仅仅正则的语法与perl5相同。
或者给我一个思路也可以,主要是我不知道仅仅一个正则表达式能否完成这个任务。
以我的水平,我感觉一个正则做不出来
对于多个src,多个标签,可以在正则的时候,把<>作为判断条件就行
倒是,你说的,这个src可能在不同位置,用一个正则我弄不出来
用2个正则,分别替换src在前和src在id后面的情况,应该是可以的
那如果id在前,src在后呢?
s/(<img(.*)?id="logo")(.*)? src="(.*)?"(.*)?>/$1$2 src="logo.png"$4>/g
@_@感觉写的很差劲,不过应该可以用吧

试试这个呢
一样难看

[Copy to clipboard] [ - ]
CODE:
$str =~ s/\s*(src="(.*?)")?\s+id="logo"\s*(src="(.*?)")?/ id="logo" src="logo.png" /g

To perljoker & redicaps:
<img...>中的属性, 是可以任意的, 所以....

用正则的话, 2次匹配是比较好的选择, 正则式也很简单.
硬塞进一个也不是不可以, 只是写的人和看的人都会比较痛苦...
恩,我就是觉得2个正则算了……确实不难,就是.*多一些
我上面写的是,src在id后的(当然,少了一个.*,不通用,去更正)
再写一个src在id前的就行了,不过……还是很难看
看来是有点复杂。
我换个解决方案吧。感谢各位的回复。总是能学到东西。