ruby:使用Regexp.union(数组)时添加boundary \ b选项?

时间:2016-08-18 02:23:24

标签: ruby-on-rails ruby regex ruby-on-rails-4

我正在创建一个正则表达式匹配器:

Regexp.new(Regexp.union(some_hash.keys))

是否可以为数组的每个元素添加边界过滤器,所以我有:

/\bkey1\b|\bkey2\b|,....../

3 个答案:

答案 0 :(得分:2)

对于正则表达式键:

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" })

答案 1 :(得分:1)

您可以使用Regexp作为

以最简单的方式生成正则表达式
hash = {'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4}
/\b#{hash.keys.join('\b|\b')}\b/
=>/\ba\b|\bb\b|\bc\b|\bd\b/

答案 2 :(得分:0)

不完全,但您可以使用scan方法......

例如: -

// commit only, if tx still hasn't been committed yet by Hibernate
if (tx.getStatus().equals(TransactionStatus.ACTIVE)) { 
    tx.commit();
}