我正在寻找单行正则表达式,它执行以下操作:
给定带有“name”属性的HTML标记,我想用自己的属性替换它。如果该标签缺少name属性,我想植入我自己的属性。结果应如下所示:
<IMG name="img1" ...> => <IMG name="myImg1" ...>
<IMG ...> => <IMG name="myImg1" ...>
这可以用单行正则表达式完成吗?
答案 0 :(得分:4)
技巧是匹配每个完整的“attribute = value”对,但捕获只有属性名称不是“name”的那些。然后插入您自己的“名称”属性以及所有捕获的属性。
s/<IMG
((?:\s+(?!name\b)\w+="[^"]+")*)
(?:\s+name="[^"]+")?
((?:\s+(?!name\b)\w+="[^"]+")*)
>
/<IMG name="myName"$1$2>
/xg;
答案 1 :(得分:1)
这不是一个完美的解决方案,标签内的间距和位置可能不是您想要的,但它确实实现了目标。这是一个perl正则表达式,但没有特别关于它的perl特定。
s/(<IMG)((\s+[^>]*)name="[^"]*")?(.*)/$1$3 name="myID"$4/g
答案 2 :(得分:0)
如果在您的示例中,name属性始终是IMG标记内的第一个,那么它非常简单。搜索
<(?!/)(/w+)\s+(name="[^"]+")?
并替换为
<\1 name="myImg1"
但我怀疑这是你真正想要的。
如果name属性可能出现在其他位置,则会变得更加困难。