正则表达式不匹配句点后跟字母 - ruby

regex not matching periods followed or preceded by letters - ruby

这是我用来添加文章标题的方法。问题是我遇到任何带有“。”的标题时出错。后面或前面的字母。例如 "example.com"、"U.S." 不匹配。但是它在使用数字时有效。

  def self.to_slug(str)
    #strip the string
    ret = str.strip

    ret.gsub! /['`]/,"-"


    ret.gsub! /\s*@\s*/, " at "
    ret.gsub! /\s*&amp\s*/, " and "
    ret.gsub! /\s*&\s*/, " and "
    ret.gsub! /\s*[.]\s*/, "-"

    ret.gsub! /\s*[^A-Za-z0-9\.\-]\s*/, '-'  

    ret.gsub! /-+/,"-"

    ret.gsub! /\A[-\.]+|[-\.]+\z/,""
    ret = ret.downcase
    ret
  end

这是标题:Guitar legends Fender snap up Irish music start-up for 5m - Independent.ie

它制造的弹头是 guitar-legends-fender-snap-up-irish-music-start-up-for-5m-independent-ie,这是错误:

Mysql2::Error: Column 'id' in where clause is ambiguous: SELECT  `articles`.`id` AS t0_r0, `articles`.`feed_id` AS t0_r1, `articles`.`publish_date` AS t0_r2, `articles`.`url` AS t0_r3, `articles`.`name` AS t0_r4, `articles`.`author` AS t0_r5, `articles`.`image` AS t0_r6, `articles`.`image_caption` AS t0_r7, `articles`.`text` AS t0_r8, `articles`.`guid` AS t0_r9, `articles`.`slug` AS t0_r10, `articles`.`video_url` AS t0_r11, `articles`.`active` AS t0_r12, `articles`.`created_at` AS t0_r13, `articles`.`updated_at` AS t0_r14,

如果要转换:

Guitar legends Fender snap up Irish music start-up for 5m - Independent.ie

Guitar-legends-fender-snap-up-irish-music-start-up-for-5m-independent-ie 

您只需将此正则表达式与 - 一起用作替换字符串:

\W+

Working demo