gpt4 book ai didi

ruby - 为什么 RegExp.escape 在我的 Ruby 表达式中不起作用?

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:43 26 4
gpt4 key购买 nike

我正在使用 Ruby 2.4。我有一些字符串包含在正则表达式中具有特殊含义的字符。因此,为了消除这些字符被解释为正则表达式字符的任何可能性,我使用“Regexp.escape”来尝试转义它们。但是,我似乎仍然无法使下面的正则表达式工作......

2.4.0 :005 >   tokens = ["a", "b?", "c"]
=> ["a", "b?", "c"]
2.4.0 :006 > line = "1\ta\tb?\tc\t3"
=> "1\ta\tb?\tc\t3"
2.4.0 :009 > /#{Regexp.escape(tokens.join(" ")).gsub(" ", "\\s+")}/.match(line)
=> nil

如何在用“\s+”表达式替换空格之前正确转义字符,而我确实希望将其解释为正则表达式字符?

最佳答案

Regexp.escape(tokens.join("")).gsub("", "\\s+") 被执行时,tokens.join("") 产生 a b? c,然后对字符串进行转义 -> a\b\?\c,然后执行 gsub,得到 a\\s +b\?\\s+c。现在,1 a b? c 3。因此,所有 \\ 现在都匹配文字反斜杠,它们不再形成特殊的正则表达式元字符匹配空格。

你需要转义标记,然后用\s+连接,或者用空格连接然后用\s+替换空格:

/#{tokens.map { |n| Regexp.escape(n) }.join("\\s+")}/.match(line)

/#{tokens.map { |n| Regexp.escape(n) }.join(" ").gsub(" ", "\\s+")}/.match(line)

关于ruby - 为什么 RegExp.escape 在我的 Ruby 表达式中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com