【发布时间】:2012-07-01 21:04:04
【问题描述】:
Glob 模式类似于正则表达式模式,但不相同。给定一个 glob 字符串,如何将其转换为相应的正则表达式字符串?
请参阅 Dir#glob 和 Perl 的 Text-Glob 库,以及 Create regex from glob expression(用于 python)。
【问题讨论】:
Glob 模式类似于正则表达式模式,但不相同。给定一个 glob 字符串,如何将其转换为相应的正则表达式字符串?
请参阅 Dir#glob 和 Perl 的 Text-Glob 库,以及 Create regex from glob expression(用于 python)。
【问题讨论】:
作为rerun gem 的一部分,我已经编写了它的部分实现,但如果有人知道更好的方法,我很想听听。这是我的代码(最新的 code 和 tests 在 github 上)。
class Glob
NO_LEADING_DOT = '(?=[^\.])' # todo
def initialize glob_string
@glob_string = glob_string
end
def to_regexp_string
chars = @glob_string.split('')
in_curlies = 0;
escaping = false;
chars.map do |char|
if escaping
escaping = false
char
else
case char
when '*'
".*"
when "?"
"."
when "."
"\\."
when "{"
in_curlies += 1
"("
when "}"
if in_curlies > 0
in_curlies -= 1
")"
else
char
end
when ","
if in_curlies > 0
"|"
else
char
end
when "\\"
escaping = true
"\\"
else
char
end
end
end.join
end
end
【讨论】:
{ 映射到(?:,因为您实际上并不需要捕获它。