2014-02-19 130 views
-2

当某些东西逃脱了正则表达式时,这意味着什么?红宝石转义正则表达式

我不确定我是否明白这是什么意思。有人可以给出解释和例子吗?

+0

你在哪看到这条线?从那里你可以在这里复制和粘贴一个代码? –

+0

“此外,标准迷宫文件中包含转义引号(例如\”path1 \“)的路径名必须转换为标准迷宫文件输出中带有普通引号(例如”path1“)的路径名。” – user3329470

+0

如果有路径名称包含转义引号,它们必须转换为普通引号。例如,在简单的迷宫文件格式输出中,名称路径“3”和“路径4”应该转换为路径“3”和“路径4”。 – user3329470

回答

1

在正则表达式中,某些字符如.+?{}[]具有意义。他们被称为metacharacters

可以逃脱他们的Ruby与.escape方法:

irb(main):001:0> Regexp.escape('*.?') 
=> "\\*\\.\\?" 
0

没有更多的上下文,很难说这意味着什么。我最好猜测的是,他们说他们已经把一个对正则表达式特殊的字符变成了普通字符。

也就是说,/foo.bar/将匹配“fooXbar”和“fooZbar”。 /foo\.bar/不会匹配那些,只会匹配“foo.bar”。

. - 匹配任何单个字符

\. - 匹配的周期。

0

只是逃避规范字符[](){}.*+-<>:?^$|\/

'a[](){}.*+-<>:?^$|\/'.gsub(/[\[\]()\{}.*+\-<>:?^$|\/]/) {|m| "\\#{m[0]}" } 
# => "a\\[\\]\\(\\)\\{\\}\\.\\*\\+\\-\\<\\>\\:\\?\\^\\$\\|\\\\/" 
0

您的评论:For instance the names path\"3\" and \"path4\" should be converted to path"3" and "path4"

转义报价仅使用正则表达式:

发现:(?<!\\)((?:\\\\)*)\\(")
更换\1\2

解释:

(?<! \\)    # Not an escape behind us 
(      # (1 start) 
     (?: \\\\)*   # Optional many double escapes (an even amount) 
)      # (1 end) 
\\      # Single escape 
(")     # (2), A double quote