ruby - 什么时候使用 Regexp.new()?

标签 ruby regex

我找不到任何合适的答案,因为 Regexp 代表正则表达式。这是一个例子:

test = Regexp.new("Hello")

它返回/Hello/,但我对它的使用感到困惑。为什么不直接使用/Hello/呢?谁能给我一个 Regexp.new() 函数的小例子?

最佳答案

假设您想让您的系统检测“以 DOG 开头并以 CAT 结尾的句子”。明显的正则表达式类似于 /DOG.+CAT\./[1].

到目前为止,有效。但现在您希望能够增强系统,以便用户可以配置开始和结束词。您可以使用 // 语法和插值来实现:

/#{startWord}.+#{endWord}\./

但您也可以使用简单的字符串来完成:

Regex.new(startWord + ".+" + endWord + "\.")

化妆品。使用你最喜欢的。但是,还有一件事很重要。使用new 函数,您不仅可以传递一个参数,还可以传递更多 参数。参见 the docs .

因此,从您的观点来看,new 存在的主要 [2] 目的实际上是能够传递更多的参数,而不仅仅是一个。使用 // 你只能传递正则表达式[3]。使用 new,您可以传递选项。

为清楚起见,一些细节被过度简化了。
[1] 它不是有效的“句子检测器”。它只是一些正则表达式来显示问题。
[2] 这不是主要目的。 new 是一个构造函数。它必须存在,否则我们将无法构造该对象。实际上,/blargh/ 语法被翻译成一个new 调用。
[3] 实际上,使用 // 你也可以传递一些选项,比如 /CaSEiNseNsiTive/i。但是,好吧,构造函数仍然更加灵活。

关于ruby - 什么时候使用 Regexp.new()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928667/

相关文章:

ruby-on-rails - Rails 使用 metasearch 和 metawhere 搜索计算字段

java - Java 7 中的 Regex-replace-with-function-evaluation 等效于什么?

javascript - Angularjs ui 路由器正则表达式

java - 正则表达式匹配 Unicode 和数字字符串

sql - 查询忽略时间戳日期的时间范围

ruby - 类名到类名

ruby - 为什么哈希的字符串键被卡住?

ruby-on-rails - rails : Unpermitted parameter in Rails 5

PHP:过滤我网站上除脚本和图像之外的所有代码?

Java 正则表达式非法转义字符错误不会从命令行参数发生