在Ruby中,我有一个任意字符串,并且我想将其转换为一个有效的Unix/Linux文件名。最终形式无所谓,只要它在视觉上可识别为最初的字符串即可。以下是一些可能的示例:
"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
有没有内置的东西(也许在文件库中)可以实现这个功能(或类似的功能)?
根据您的要求,您可以通过正则表达式替换来实现此操作。 此正则表达式将匹配所有基本字母和数字以外的字符:
s/[^\w\s_-]+//g
s/(^|\b\s)\s+($|\s?\b)/\\1\\2/g
s/\s+/_/g
以下是 Ruby 代码示例:
def friendly_filename(filename)
filename.gsub(/[^\w\s_-]+/, '')
.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
.gsub(/\s+/, '_')
end
gsub
中需要 "i"? - jrdioko\w
只对应于[a-z0-9]
,但实际上它是[a-zA-Z0-9]
。谢谢你指出来 - 我会编辑我的答案。 - Jon Gauthierparameterize
的方法应该会有所帮助。"Here's my string!".parameterize => "here-s-my-string"
"* is an asterisk, you see".parameterize => "is-an-asterisk-you-see"
\0
和/
。* is an asterisk, you see
是一个完全有效的文件名。 - sepp2k