【问题标题】:Generate random string based on Regex?基于正则表达式生成随机字符串?
【发布时间】:2013-03-29 09:29:12
【问题描述】:

我想知道是否有办法从正则表达式生成随机字符串,例如:

/[a-z0-9]{5}/.to_s
#=> "dsar3"

我找到了randexp (https://github.com/benburkert/randexp),但它似乎不适用于上面这样的基本示例,无论如何我觉得它被遗弃了。

有人吗?

【问题讨论】:

  • @iAmRubuuu 这不是真正随机的,而是由模式决定的。
  • 它需要一些基本的约束,对吧?我的意思是,没有办法生成与/.*/ 匹配的随机正则表达式,因为所涉及的字符数可以是 0 到无限之间的任意长度。 number 个字符也应该是随机的,还是我们应该尝试从无限集合中随机选择一个值?或者你是在建议一个约束,其中正则表达式不能允许 * 或 + 之类的东西(就像你的例子一样)?
  • 另外,如果你在正则表达式上有 .to_s 提供一个随机匹配的字符串,那么对于下一个看到该代码的开发人员来说,这将是一个非常严重的问题。

标签: ruby regex string random


【解决方案1】:

Perl 有一个 CPAN 模块可以做到这一点。它通过将正则表达式转换为生成语法来工作。这个概念可能适用于 Ruby,但需要一点工作。

http://metacpan.org/pod/Parse::RandGenhttp://metacpan.org/pod/Parse::RandGen::Regexp

【讨论】:

    【解决方案2】:

    没有,但是怎么样:

    (0..255).map(&:chr).select{|x| x =~ /[a-z0-9]/}.sample(5).join
    #=> "qif0l"
    

    【讨论】:

    • x =~ /[a-z0-9]/ 在逻辑上做什么?
    • 它只选择匹配正则表达式的字符
    • sample 不允许重复,因此“qqf01”永远不会发生。
    • 如果你真的需要复制,有一个简单的解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2011-03-11
    相关资源
    最近更新 更多