Ruby on rails 如何让gsub处理多个模式和替换
不久前,我在PHP中创建了一个函数,用于“推特化”通过推特API获取的推特文本 下面是它的样子:Ruby on rails 如何让gsub处理多个模式和替换,ruby-on-rails,ruby,regex,twitter,Ruby On Rails,Ruby,Regex,Twitter,不久前,我在PHP中创建了一个函数,用于“推特化”通过推特API获取的推特文本 下面是它的样子: 函数twitterize($tweet){ $patterns=array(“/(([A-Za-z]{3,9}:(?:\/\/))(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-+\;(?:www.124;[-;:&=\+\$,\ w]+@[A-Za-z0-9.-+)((?:\/\/[\+++++-%\/.\w---*)(?:[\+++++--=)。。。), “/(?好吧,正如你从
函数twitterize($tweet){
$patterns=array(“/(([A-Za-z]{3,9}:(?:\/\/))(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-+\;(?:www.124;[-;:&=\+\$,\ w]+@[A-Za-z0-9.-+)((?:\/\/[\+++++-%\/.\w---*)(?:[\+++++--=)。。。),
“/(?好吧,正如你从文档中读到的,gsub
不能同时处理多个模式和替换。这就是导致错误的原因,否则会非常明显(你可以将其理解为“给我一个字符串,而不是数组!!1”)
你可以这样写:
def twitterize(text)
patterns = [/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/, /(?<=^|(?<=[^a-zA-Z0-9-\.]))@([A-Za-z_]+[A-Za-z0-9_]+)/, /(?<=^|(?<=[^a-zA-Z0-9-\.]))#([A-Za-z_]+[A-Za-z0-9_]+)/]
replacements = ["<a href='\\0' target='_blank'>\\0</a>",
"<a href='http://twitter.com/\\1' target='_blank'>\\0</a>",
"<a href='http://twitter.com/search?q=\\1&src=hash' target='_blank'>\\0</a>"]
patterns.each_with_index do |pattern, i|
text.gsub!(pattern, replacements[i])
end
text
end
def twitterize(文本)
(([A-A-扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎gsub
函数中的字符串。其语法为:
text.gsub(matching_pattern,replacement_text)
您需要这样做:
replaced_text = text.gsub(pattern1, replacement1)
replaced_text = replaced_text.gsub(pattern2, replacement2)
以此类推,其中模式1是您的匹配模式之一,替换是您想要的替换文本。有人愿意解释您为什么对这个问题投反对票吗?好的,谢谢,我真的很惊讶gsub没有处理多个模式。我只是觉得我没有正确理解文档。谢谢!哇,第一次r与PHP相比,uby让我失望。它肯定会工作的,谢谢!
replaced_text = text.gsub(pattern1, replacement1)
replaced_text = replaced_text.gsub(pattern2, replacement2)