【问题标题】:Escaping single and double quotes in a string in ruby?在ruby中转义字符串中的单引号和双引号?
【发布时间】:2011-10-06 01:35:16
【问题描述】:

如何在字符串中转义单引号和双引号?

我想一起转义单引号和双引号。我知道如何分别通过它们,但不知道如何通过它们。

例如:str = "ruby 'on rails" " = ruby 'on rails"

【问题讨论】:

    标签: ruby escaping


    【解决方案1】:

    我的首选方法是不用担心转义,而是使用%q,其行为类似于单引号字符串(无插值或字符转义),或%Q 用于双引号字符串行为:

    str = %q[ruby 'on rails" ] # like single-quoting
    str2 = %Q[quoting with #{str}] # like double-quoting: will insert variable
    

    查看https://docs.ruby-lang.org/en/trunk/syntax/literals_rdoc.html#label-Strings 并搜索% strings。

    【讨论】:

    • 它给出了 ruby​​ 'on rails\" 的引用,我不需要额外的 \
    • 只有当你inspect它时才会显示转义。试试puts吧。
    • 对于字符串变量,转义双引号:value.gsub('"', '\"')
    【解决方案2】:

    一个警告:

    使用%Q[] 和%q[] 进行字符串比较在直觉上并不安全。

    例如,如果您加载一些意在表示空的内容,例如"" 或'',您需要使用实际的转义序列。例如,假设 qvar 等于 "" 而不是任何空字符串。

    这将评估为false
    if qvar == "%Q[]"

    同样,
    if qvar == %Q[]

    虽然这将评估为 true
    if qvar == "\"\""

    我在将命令行变量从不同的堆栈发送到我的 ruby​​ 脚本时遇到了这个问题。只有Gabriel Augusto's answer 为我工作。

    【讨论】:

      【解决方案3】:

      我只会使用: str = %(ruby 'on rails ") 因为只有 % 代表双引号(或 %Q)并允许在字符串上插值。

      【讨论】:

        【解决方案4】:

        这是一个完整的列表:

        来自http://learnrubythehardway.org/book/ex10.html

        【讨论】:

          【解决方案5】:

          如果我开始担心逃跑,我会选择heredoc。它会为您处理好:

          string = <<MARKER 
          I don't have to "worry" about escaping!!'"!!
          MARKER
          

          MARKER 描述了字符串的开始/结束。打开heredoc后在下一行开始字符串,然后在它自己的行上再次使用delineator结束字符串。

          这完成了所有需要的转义并转换为双引号字符串:

          string
          => "I don't have to \"worry\" about escaping!!'\"!!\n"
          

          【讨论】:

          • 请注意,heredoc 是引用小字符串的一种笨拙方式。这个问题需要的是一个元答案,列出所有引用选项及其优缺点。
          • 非常正确,马克。我应该注意到在小字符串上使用它们很恶心。
          【解决方案6】:

          这是一个如何在更复杂的场景中使用%Q[] 的示例:

            %Q[
              <meta property="og:title" content="#{@title}" />
              <meta property="og:description" content="#{@fullname}'s profile. #{@fullname}'s location, ranking, outcomes, and more." />
            ].html_safe
          

          【讨论】:

            【解决方案7】:

            使用反斜杠转义字符

            str = "ruby \'on rails\" "
            

            【讨论】:

              【解决方案8】:

              您可以使用 Q 字符串,它允许您使用任何您喜欢的分隔符:

              str = %Q|ruby 'on rails" " = ruby 'on rails|
              

              【讨论】:

              • 我有搜索栏并解析了这个 "sdasd" "fsd" 它给了我 = Q|sdasd"
              【解决方案9】:
              >> str = "ruby 'on rails\" \" = ruby 'on rails"
              => "ruby 'on rails" " = ruby 'on rails"
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-12-21
                • 2015-12-02
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多