我正在使用以下方法创建一个正则表达式匹配器:
Regexp.new(Regexp.union(some_hash.keys))
是否可以为数组的每个元素添加边界过滤器,所以我有:
/\bkey1\b|\bkey2\b|,....../
最佳答案
对于正则表达式键:
Regexp.union(some_hash.keys.map { |k| /\b#{k}\b/ })
或文字键:
Regexp.union(some_hash.keys.map { |k| /\b#{Regexp.escape(k)}\b/ })
Regexp.union
的结果已经是一个Regexp
,不需要Regexp.new
。事实上,我们也可以在 Regexp.union
中使用纯字符串,不同之处在于我们不在每个子表达式中初始化标志:
Regexp.union(some_hash.keys.map { |k| "\\b#{k}\\b" })
Regexp.union(some_hash.keys.map { |k| "\\b#{Regexp.escape(k)}\\b" })
关于ruby-on-rails - ruby:使用 Regexp.union(数组)时添加 boundaries\b 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009009/