【问题标题】:Ruby RegEx problem text.gsub[^\W-], '') failsRuby RegEx 问题 text.gsub[^\W-], '') 失败
【发布时间】:2010-09-13 10:03:31
【问题描述】:

我正在尝试学习 Ruby 中的 RegEx,基于我在“Rails Way”中阅读的内容。但是,即使是这个简单的例子也让我难过。不知道是不是笔误:

text.gsub(/\s/, "-").gsub([^\W-], '').downcase

在我看来,这会将所有空格替换为-,然后在字符串以非字母或数字开头并后跟破折号的任何地方,将其替换为''。但是,使用 irb,它首先在 ^ 上失败:

语法错误,意外'^',期待']'

如果我取出 ^,它会在 W 上再次失败。

【问题讨论】:

    标签: ruby regex


    【解决方案1】:
    >> text = "I love spaces"
    => "I love spaces"
    >> text.gsub(/\s/, "-").gsub(/[^\W-]/, '').downcase
    => "--"
    

    缺少 //

    虽然这更有意义:-)

    >> text.gsub(/\s/, "-").gsub(/([^\W-])/, '\1').downcase
    => "i-love-spaces"
    

    大概就是这个意思

    >> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
    => "i-love-spaces"
    

    \W 表示“不是一个词” \w 表示“一个词”

    // 生成一个正则表达式对象

    /[^\W-]/.class => 正则表达式

    【讨论】:

      【解决方案2】:

      第 1 步:Add this to your bookmarks。每当我需要查找正则表达式时,这是我的第一站

      第 2 步:让我们浏览您的代码

      text.gsub(/\s/, "-")
      

      您正在调用 gsub 函数,并为其提供 2 个参数。
      第一个参数是/\s/,它是ruby 表示“创建一个包含\s 的新正则表达式(// 就像正则表达式的特殊“”)。
      第二个参数是字符串"-"

      因此,这会将所有空白字符替换为连字符。到目前为止,一切顺利。

      .gsub([^\W-], '').downcase
      

      接下来你再次调用 gsub,传递给它 2 个参数。 第一个参数是[^\W-]。因为我们没有在正斜杠中引用它,所以 ruby​​ 会尝试运行该代码。 [] 创建一个数组,然后尝试将^\W- 放入数组中,这是无效代码,因此它会中断。
      将其更改为 /[^\W-]/ 会给我们一个有效的正则表达式。

      查看正则表达式,[] 表示“匹配该组中的任何字符。该组包含\W(表示非单词字符)和-,因此正则表达式应匹配任何非单词字符或任何连字符。

      由于您传递给 gsub 的第二件事是一个空字符串,它最终应该用空字符串替换所有非单词字符和连字符(从而将它们剥离)

      .downcase
      

      这只是将字符串转换为小写。

      希望这会有所帮助:-)

      【讨论】:

        【解决方案3】:

        你忘记了斜线。应该是/[^\W-]/

        【讨论】:

          【解决方案4】:

          嗯,.gsub(/[^\W-]/,'') 说替换任何不是单词或 - 的东西。

          你可能想要

          >> text.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
          => "i-love-spaces"
          

          小写\w(\W正好相反)

          【讨论】:

            【解决方案5】:

            斜线表示它们之间的内容是正则表达式,就像引号表示它们之间的内容是字符串一样。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-21
              相关资源
              最近更新 更多