如何解决以下问题?Ruby只用另一个字符串替换完全匹配的字符串
我有一个HTML字符串类似以下之一:
<p>aaa, b aa aaaaa?<br/>Next possible text b bb aa b.</p>
现在,我想只有
"aaa"
与
"<div class='special'>aaa</div>"
新的字符串替换之后替换,例如:
<p><div class='special'>aaa</div>, b aa aaaaa?<br/>Next possible text b bb aa b.</p>
所以我想要一个通用替代品,它只替换完全匹配的字符串。 “aaa”只是一个例子。它也可能是“bb”或“两个单词”(=>两个单词,所以text.split在我看来不起作用)。
任何人有这样一个动态的发现,匹配和替代者的想法?
我想它已经像以下:
items = ["aaa", "a", "aa", "aa b", "c"]
text = "<p>aaa, b aa aaaaa?<br/>Next possible text b bb aa b.</p>"
words = text.split => ["<p>aaa,", "b", "aa", "aaaaa?<br/>Next", "possible", "text", "b", "bb", "aa", "b.</p>"]
new_words = []
words.each do |w|
items.each do |item|
if w == item
w = '<div class="special">#{item}</div>'
end
end
new_words << w
end
text = new_words.join(" ")
结果:
"<p>aaa, b <div class='special'>aa</div> aaaaa?<br/>Next possible text b bb <div class='special'>aa</div> b.</p>"
但它应该是:
"<p><div class='special'>aaa</div>, b <div class='special'>aa</div> aaaaa?<br/>Next possible text b bb <div class='special'>aa b</div>.</p>"
我最大的问题是:
- 特殊字符,例如“,。?()%€” - 字符串末尾的字符 =>“aaa”,来自示例
- 具有相同部分的子字符串=>像“aaa”和“aa”
- 两个字作为一个项目=>像“AA(b)”,从示例
有人用于固定我的问题的想法?
编辑:东西是只为我更换一个占位符..我真正的更换也可以:
%Q(<dfn title="#{strip_tags item.text}">#{item.name}</dfn>)
item.text是一切=>可能还包含“AAA” item.name是例如“aaa”
所以多个gsub会替换已经替换的内容。
它应该是'sub'而不是'gsub',因为OP只需要第一个匹配,并没有指定它总是在标签旁边。 – iain