为什么仅将%r用于匹配多个'/'字符的正则表达式?

时间:2016-03-08 16:06:58

标签: ruby

我知道在Ruby中使用CREATE TABLE `equipment` ( `equ_pk` int(11) NOT NULL AUTO_INCREMENT, `equ_desc` varchar(60) NOT NULL COMMENT 'Description', `equ_code` varchar(10) NOT NULL COMMENT 'Code', PRIMARY KEY (`equ_pk`), UNIQUE KEY `equ_code_UNIQUE` (`equ_code`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 将自动转义我的正则表达式中的所有正斜杠,但显然我们不应该使用它,如果正则表达式中只有一个正斜杠。

我在多个Ruby样式指南(即StyleguideRuby-style-guide)中看到了这一点,默认情况下Rubocop标记它,但我找不到它的解释。

如果正则表达式中只有一个正斜杠,为什么不使用%r{some regex}?只是因为这种符号只能帮助你逃避一个斜线似乎不是一个不使用它的好理由。

3 个答案:

答案 0 :(得分:5)

  如果正则表达式中只有一个正斜杠,显然你不应该使用它。

事实并非如此。

  

我在多个Ruby样式指南(即此处和此处)中看到了这一点

基于一些有限的观察,你会得出结论。这只是这些人自己的决定。无论谁对这些人表示同情,都可能试图传播这种做法。

但是,我在这种说法中看到了一些理由。我认为在不同的场合,Ruby有几种方式来表达同样的事情。随机选择这种或那种方式会使代码难以阅读并且可能导致人为错误。所以我们应该尽可能坚持一个符号。这也适用于正则表达式文字。由于//是最简洁和无标记的正则表达式字面值,因此我们应尽可能坚持使用它。

是否使用%r符号应该取决于专业人员(避免逃避斜线的必要性)是否超过缺点(偏离使用标准//符号和/或使用更长的符号) 。似乎那些人认为单一斜线(单次逃生)不能使专业人员超过缺点,但两个或更多。这是有道理的,因为%r{}符号比//多两个字符,所以当后者需要两次转义时它会成为一个平局,除此之外,%r{}成为较短的符号。 / p>

答案 1 :(得分:2)

编程中一个更具视觉刺激性的方面是处理字符串/路径和正则表达式中的转义字符。它令人如此恼火,多年前它被赋予了一个名字" leaning toothpick syndrome"。

在Ruby中引入%r%q%Q,在Perl和其他语言中引入类似内容,是为了减少视觉噪音。处理长条纹和含有斜线的图案会使我们的眼睛疲劳并使我们的大脑麻木,从而导致错误和错误。

使用常识和小组/小组达成的共识来确定是使用//还是%r{}还是其他分隔符,并且在处理时,请记住为您的未来自我和/或团队成员怜悯LTS。凌晨3点调试并盯着逃脱的斜线可能会令人沮丧。

至于逃避被自动添加,不,Ruby不会这样做。 PHP有" magic quotes"所以也许有人会改变他们的想法并混淆两者。

答案 2 :(得分:1)

Ruby文字的文档中没有这样的限制。我会使用看起来更具可读性的东西,在我看来,当正则表达式中有斜杠时,%r符号显然会获胜。