字符串文字中的转义状态作为“String#tr”的参数

2023-12-06

对于作为参数的单引号字符串文字中的反斜杠的转义状态,对我来说有些神秘String#tr。你能解释一下下面三个例子之间的对比吗?我尤其不明白第二个。为了避免复杂化,我正在使用'd'在这里,当用双引号转义时不会改变含义("\d" = "d").

'\\'.tr('\\', 'x')      #=> "x"
'\\'.tr('\\d', 'x')     #=> "\\"
'\\'.tr('\\\d', 'x')    #=> "x"

逃亡于tr

第一个参数tr其工作原理与正则表达式中的括号字符分组非常相似。您可以使用^在表达式的开头否定匹配(替换任何不匹配的内容)并使用例如a-f匹配一系列字符。由于它有控制字符,它也会在内部进行转义,所以你可以使用- and ^作为文字字符。

print 'abcdef'.tr('b-e', 'x')  # axxxxf
print 'abcdef'.tr('b\-e', 'x') # axcdxf

在 Ruby 单引号字符串中转义

此外,当使用单引号时,Ruby 会尽可能包含反斜杠,即当它不用于实际转义另一个反斜杠或单引号时。

# Single quotes
print '\\'    # \
print '\d'    # \d
print '\\d'   # \d
print '\\\d'  # \\d

# Double quotes
print "\\"    # \
print "\d"    # d
print "\\d"   # \d
print "\\\d"  # \d

回顾例子

考虑到所有这些,让我们再次看一下这些示例。

'\\'.tr('\\', 'x')      #=> "x"

字符串定义为'\\'变成文字字符串\因为第一个反斜杠逃脱了第二个反斜杠。那里没有什么惊喜。

'\\'.tr('\\d', 'x')     #=> "\\"

字符串定义为'\\d'变成文字字符串\d. The tr引擎又使用文字字符串中的反斜杠来转义d。结果:tr替换实例d with x.

'\\'.tr('\\\d', 'x')    #=> "x"

字符串定义为'\\\d'变成字面意思\\d. First \\变成\. Then \d变成\d,即保留反斜杠。 (这种特殊的行为与双字符串不同,双字符串中的反斜杠会被活活吃掉,只留下一个孤独的字符串d)

文字字符串\\d然后使tr替换所有反斜杠或d与替换字符串。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串文字中的转义状态作为“String#tr”的参数 的相关文章

随机推荐

  • 进行媒体查询的最佳方式[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在 HTML 中放置媒体查询的最佳方式是什么 在同一个 CSS 文件中 例如 my text font size 30px media only screen and max width
  • 使 GridView 页脚在没有数据绑定时可见

    当gridview中没有数据时如何显示页脚以从页脚插入数据 最简单的方法是绑定一个长度为 1 的数组 您可以在其中添加任何您喜欢的内容来标识这是一个虚拟行 在 GridViews RowDataBound 方法中检查数据项是否为虚拟行 在尝
  • PHP:使用外部数据执行 ORDER BY?

    嘿大家 长话短说 如果您不介意向这位 PHP 新手伸出援手的话 我有一个名为 类别 的数据库字段 其中存储了以下内容 Fruit People Place Animals Landscape 我在数据库中还有一个单独的表 其中每个项目的字段
  • Mac OS 上的 Java 随机变慢

    我有一个 Java 程序 用于跨多个处理器进行一组科学计算 方法是将其分成多个部分并在不同的线程中运行每个部分 该问题是可以简单划分的 因此线程之间不存在争用或通信 他们访问的唯一公共数据是一些不需要同步访问的共享静态缓存 以及硬盘驱动器上
  • 使用批处理文件修改文件内容

    我需要创建一个批处理文件 使用它我们可以修改文件的内容 例如 Testing txt 文件包含一行 描述 MAN Human 改成 描述 MAN Human V2 仅在 MAN 末尾添加 V2 因此 当我们打开文件时 我们会看到描述名称 M
  • 如何在Spacy中为OOV术语指定词向量?

    我有一个预训练的 word2vec 模型 我将其加载到spacy对新单词进行矢量化 给定我执行的新文本nlp hi vector获取单词 hi 的向量 最终 需要对一个新单词进行向量化 该新单词不存在于我的预训练模型的词汇表中 在这种情况下
  • ASP.NET4 画布应用程序:回发导致意外重定向

    我正在使用工具包的 build 5 06 我才刚刚开始 尝试做一些简单的事情 让回发工作 但是 当用户单击回发按钮时 浏览器会快速重定向到某个内容 我认为是 uiserver 然后再次重定向到 facebookredirect axd 最后
  • Google App Engine 原子部分?

    假设您从数据存储中检索一组记录 类似于 select from MyClass whereserved false 我如何确保另一个用户没有设置保留仍然为假 我查看了事务文档 并对谷歌的解决方案感到震惊 该解决方案是捕获异常并在循环中重试
  • 使用 Google Identity Services (GIS) JavaScript SDK,如何扩展会话?

    per https developers google com identity oauth2 web reference js reference 似乎没有一个refresh token流动 过期时间是1小时 所以并不可怕 但我想在用户仍
  • Clearcase 和 java 进程:更改视图不适用

    我有一个简单的应用程序 它接收用户输入的 CC 流名称 并假设从该流存储库返回特定文件的内容 我尝试使用一个简单的 shell 脚本来执行此操作 用户输入流名称 java接收流名称 运行一个进程 该进程运行一个脚本 myccscript s
  • “无法找到主类”

    我尝试从命令提示符运行示例 Java 应用程序 但收到以下错误 Exception in thread main java lang NoClassDefFoundError com badlogic gdx helloworld Hell
  • Objective-C 序列化复杂对象列表

    我有一个类列表 如下所示 interface AISlideItem NSObject NSString PlaceHolderName NSUInteger PlaceHolderID property nonatomic strong
  • OpenJPA 与 Glassfish 配合得很好吗?

    有人成功地将 OpenJPA 与 Glassfish 结合使用吗 我正在尝试将 OpenJPA 2 1 与 Glassfish 3 1 开源一起使用 我已按照此处的说明将两者集成 gt http weblogs java net blog
  • 如何在编译时确定元组元素的偏移量?

    我需要确定元组中某个索引元素的偏移量compile time 我尝试了这个功能 复制自https stackoverflow com a 55071840 225186 接近尾声 template
  • 对文件夹中的所有文件执行命令

    我想对目录中的所有文件运行命令 对于 c conversion ajt 中的 1 执行以下操作转换命令 1 2 但是 我需要一个与输入相同但具有不同文件扩展名的输出文件名 asciitojt exe filename1 ajt filena
  • 在 mutate() 中使用列函数的变量

    我如何使用变量来代替列名在 dplyr 字符串中 举个例子 我想向 iris 数据集添加一列 称为 sum 它是 Sepal Length 和 Sepal Width 的总和 简而言之 我想要以下代码的工作版本 x Sepal Length
  • Python str() 双引号字符串

    我知道这个问题听起来很幼稚 但我还是坚持下去 我正在使用 jquery 自动完成 结果发现它需要 data1 data2 形式的列表 我正在从 json 文件获取数据并且 data json load fobj content data s
  • PHP 作曲家 HTTPS 错误 1416F086。证书验证失败

    我突然在使用 PHP Composer 时遇到了这个令人讨厌的 HTTPS 错误 而 Composer 曾经在我的机器上工作 Github 和 stackoverflow 上已经有存在相同问题的主题 我尝试了所有推荐的东西 但没有任何对我有
  • C# - 内部属性在快速观察中“可读”但不使用反射?

    我看到 快速监视 窗口可以访问所有属性 无论库中类的访问限制 内部 受保护 私有 如何 即使在完全不同的应用程序 库和命名空间中引用该库也是如此 然而我没有找到使用 反射 访问这些的方法 我特别尝试 读取 注意 只是读取 程序集的内部属性
  • 字符串文字中的转义状态作为“String#tr”的参数

    对于作为参数的单引号字符串文字中的反斜杠的转义状态 对我来说有些神秘String tr 你能解释一下下面三个例子之间的对比吗 我尤其不明白第二个 为了避免复杂化 我正在使用 d 在这里 当用双引号转义时不会改变含义 d d tr x gt