Ruby Regex替换/abcdef/abcdef到/abcdef
通过比较变量str中的值来替换与变量路径的起始值不匹配的路由Ruby Regex替换/abcdef/abcdef到/abcdef,ruby,regex,Ruby,Regex,通过比较变量str中的值来替换与变量路径的起始值不匹配的路由 path = '/qqqq/rrrr' str = %w|abcd efgh ijkl mnop \n| path.gsub(/\w+/) { |rep| str.include?(rep) ? rep : 'unknown' } 输入>路径=/abcd输出>/abcd 输入>路径=/efgh输出>/efgh 输入>路径=/abcd/efgh输出>/unknown 输入>路径=/xxxx输出>/unknown 输入>路径=/xxxx
path = '/qqqq/rrrr'
str = %w|abcd efgh ijkl mnop \n|
path.gsub(/\w+/) { |rep| str.include?(rep) ? rep : 'unknown' }
输入>路径=/abcd输出>/abcd
输入>路径=/efgh输出>/efgh
输入>路径=/abcd/efgh输出>/unknown
输入>路径=/xxxx输出>/unknown
输入>路径=/xxxx/yyyy输出>/unknown
输入>路径=/xxxx/abcd输出>/unknown
在正则表达式中包含是否有等效项?使用gsub!我们应该这样做:
path.
gsub(/\w+/) { |rep| str.include?(rep) ? rep : 'unknown' }.
sub!("/unknown", "")
如果任何路径与其中一个选项不完全匹配,则应转换:
result = subject.gsub(
/\A # Match from the start of the string
(?! # Assert that this doesn't match:
\/ # a slash
(abcd|efgh|ijkl|mnop) # followed by one of the allowed paths
\z # that makes up the entire string
) # (End of lookahead assertion)
.* # Match anything/x, '/unknown')
但是你不需要正则表达式
str = %w|abcd efgh ijkl mnop|
paths = %w|/abcd /efgh /abcd/efgh /xxxx /xxxx/yyyy /xxxx/abcd|
paths.map { |path| path[%r|\A/(?:#{Regexp.union(str)})/?\z|] || '/unknown' }
#⇒ ["/abcd", "/efgh", "/unknown", "/unknown", "/unknown", "/unknown"]
Regexp是:
\A
表示字符串的开头,后跟一个斜杠,后跟一个构建为可能性并集的正则表达式,后跟一个斜杠,后跟字符串的结尾。为了澄清这一点,您需要删除路径中未在str
中找到的所有部分,您还想将多个后续匹配压缩为一个?所以/abdc/qqqq/rrrrr/efgh/ssss
将变成/abdc/unknown/efgh/unknown
?请定义“路由”。你确定你不是指sub
而不是gsub
?而且,str
不是数组的最佳名称。;-)路径任何部分中不匹配的str值应将结果压缩为/unknown。输入:/abdc/qqq/rrrrr/efgh/ssss输出:/unknown您所说的开始是什么意思?似乎任何位置的未知字符串都在触发匹配?输入:/abdc/qqqq/rrrrr/efgh/ssss输出:/unknown输入:/sdfgfg/adcd/efegh输出:/unknown输入:/bacd/efgh输出:/unknown输入:/bacd输出:/efgh输出:/efghpath应与其中一个选项完全匹配。如果不匹配,则转换为“/未知”。有关更多信息,请参见编辑后的问题。这就是正则表达式的作用。您是否测试过它,但它没有按预期工作?您没有使用gsub代码>您自己答案中的任意位置。命名方法错误:未定义“/abcd”的方法“map”:StringNo way。你在什么地方出错了。上面的代码非常有效。路径是复数。我没有转换任何内容,但您可能希望至少阅读我提供的答案中的代码。当我使用路径时,您的代码可以工作。但我的路径值不同。路径=“/abcd”不是%w |/abcd |。这是导致问题映射的原因。当您要根据需要更新我的代码时,将字符串转换为%w的任何解决方法。这不是一项免费为您编写代码的服务,我完全不在乎您的特殊需要。我已经提供了一个答案,对未来的游客来说可能很有价值。