类 String
公共实例方法
将文件扩展名替换为 newext
。如果字符串没有扩展名,则将新扩展名追加到末尾。如果未给出新扩展名或为空字符串,则删除任何现有的扩展名。
ext
是为 String
类添加的用户方法。
此 String
扩展来自 Rake
# File rake-13.2.1/lib/rake/ext/string.rb, line 14 def ext(newext="") return self.dup if [".", ".."].include? self if newext != "" newext = "." + newext unless newext =~ /^\./ end self.chomp(File.extname(self)) << newext end
根据给定的规范映射路径。该规范控制映射的细节。以下特殊模式被识别:
%p
-
完整路径。
%f
-
路径的基本文件名,包括其文件扩展名,但不包括任何目录。
%n
-
路径的文件名,不包括其文件扩展名。
%d
-
路径的目录列表。
%x
-
路径的文件扩展名。如果没有扩展名,则为空字符串。
%X
-
除了文件扩展名之外的所有内容。
%s
-
如果定义了备用文件分隔符,则使用它,否则使用标准文件分隔符。
%%
-
%
%d
说明符还可以有一个数字前缀(例如 ‘%2d’)。如果数字为正数,则只返回路径中(最多)n
个目录,从左侧开始。如果 n
为负数,则从路径的右侧返回(最多)n
个目录。
示例
'a/b/c/d/file.txt'.pathmap("%2d") => 'a/b' 'a/b/c/d/file.txt'.pathmap("%-2d") => 'c/d'
此外,%d
、%p
、%f
、%n
、%x
和 %X
运算符可以接受模式/替换参数,以对路径的特定部分执行简单的字符串替换。模式和替换之间用逗号分隔,并用大括号括起来。替换规范位于 % 字符之后,但在运算符字母之前。(例如,“%{old,new}d”)。多个替换规范应以分号分隔(例如,“%{old,new;src,bin}d”)。
正则表达式可以用于模式,并且反向引用可以用于替换文本。大括号、逗号和分号都排除在模式和替换文本之外(让我们保持解析合理)。
例如
"src/org/onestepback/proj/A.java".pathmap("%{^src,class}X.class")
返回
"class/org/onestepback/proj/A.class"
如果替换文本是“*”,则可以提供一个块来执行替换的一些任意计算。
例如
"/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext| ext.downcase }
返回
"/path/to/file.txt"
此 String
扩展来自 Rake
# File rake-13.2.1/lib/rake/ext/string.rb, line 138 def pathmap(spec=nil, &block) return self if spec.nil? result = "".dup spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag| case frag when "%f" result << File.basename(self) when "%n" result << File.basename(self).ext when "%d" result << File.dirname(self) when "%x" result << File.extname(self) when "%X" result << self.ext when "%p" result << self when "%s" result << (File::ALT_SEPARATOR || File::SEPARATOR) when "%-" # do nothing when "%%" result << "%" when /%(-?\d+)d/ result << pathmap_partial($1.to_i) when /^%\{([^}]*)\}(\d*[dpfnxX])/ patterns, operator = $1, $2 result << pathmap("%" + operator).pathmap_replace(patterns, &block) when /^%/ fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'" else result << frag end end result end
将路径分解为各个组件。由 pathmap
使用。
此 String
扩展来自 Rake
# File rake-13.2.1/lib/rake/ext/string.rb, line 27 def pathmap_explode head, tail = File.split(self) return [self] if head == self return [tail] if head == "." || tail == "/" return [head, tail] if head == "/" return head.pathmap_explode + [tail] end
从路径中提取部分路径。如果 n
为正数,则从前端(左侧)包括 n
个目录。如果 n
为负数,则从后端(右侧)包括 |n
| 个目录。
此 String
扩展来自 Rake
# File rake-13.2.1/lib/rake/ext/string.rb, line 41 def pathmap_partial(n) dirs = File.dirname(self).pathmap_explode partial_dirs = if n > 0 dirs[0...n] elsif n < 0 dirs.reverse[0...-n].reverse else "." end File.join(partial_dirs) end
对给定路径执行 pathmap 替换操作。模式采用“pat1,rep1;pat2,rep2…”的形式。
此 String
扩展来自 Rake
# File rake-13.2.1/lib/rake/ext/string.rb, line 59 def pathmap_replace(patterns, &block) result = self patterns.split(";").each do |pair| pattern, replacement = pair.split(",") pattern = Regexp.new(pattern) if replacement == "*" && block_given? result = result.sub(pattern, &block) elsif replacement result = result.sub(pattern, replacement) else result = result.sub(pattern, "") end end result end