gpt4 book ai didi

ruby-on-rails - 评估存储在数据库中的 Ruby 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:46 26 4
gpt4 key购买 nike

我正在构建一个工具来将各种内容的重写规则保存到数据库表中:

+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| replace_text | varchar(100) | NO | | NULL | |
| replace_with | varchar(100) | YES | | NULL | |
| scp | varchar(20) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+

当我处理内容时,我只是提取所有相关规则(基于 scp 字段)并运行 <variable>.gsub(replace_text, replace_with)更改所需的任何内容。

我的问题是是否可以检查 replace_text包含有效的正则表达式并使用它而不是替换列的纯文本内容?

因为基本上:

 "Sometimes it's best to keep things simple".gsub('/[aeiou]/',"x")

输出“有时最好让事情保持简单”

同时:

"Sometimes it's best to keep things simple".gsub(eval('/simple/'),"x")

"Sometimes it's best to keep things simple".gsub(/simple/,"x")

输出我需要的:

“有时候最好保留东西x”

所以基本上我正在寻找的是一种方法来查明字符串是否包含有效的正则表达式。

我四处搜索了一下,似乎正则表达式无法用其他正则表达式进行验证。使用 eval()始终不是一个选项,因为变量可能并不总是包含正则表达式,而只是一些要删除/替换的纯文本。

TIA

最佳答案

给定一个包含有效正则表达式的字符串,Regexp.new 成功返回:

Re1.9.3-p484 :001 > Regexp.new("asdf")
=> /asdf/

给定一个包含无效正则表达式的字符串,Regexp.new 引发 RegexpError:

1.9.3-p484 :002 > Regexp.new("asdf)")
RegexpError: unmatched close parenthesis: /asdf)/

因此:

def pattern_to_regexp(pattern)
Regexp.new(pattern)
rescue RegexpError
nil
end
alias valid_regexp_pattern? pattern_to_regexp

如果可能则返回正则表达式,如果模式字符串不是有效的正则表达式则返回 nil。

由于 Regexp 为真,nil 为假,valid_regexp_pattern 是相同的方法。

使用方法:

s.gsub(pattern_to_regexp(pattern) || pattern, replacement)

这是可行的,因为 String#gsub 将采用正则表达式或字符串作为搜索参数。

关于ruby-on-rails - 评估存储在数据库中的 Ruby 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com