我正在创建一个正则表达式匹配器:
Regexp.new(Regexp.union(some_hash.keys))
是否可以为数组的每个元素添加边界过滤器,所以我有:
/\bkey1\b|\bkey2\b|,....../
答案 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();
}