在Ruby中为Regex模式生成字符串

mor*_*ipo 11 ruby regex string random-sample

在Python语言中,我发现rstr可以为正则表达式模式生成一个字符串.

或者在Python中我们有这个方法可以返回字符串的范围:

re.sre_parse.parse(pattern)
#..... ('range', (97, 122)) ....
Run Code Online (Sandbox Code Playgroud)

但在Ruby中我没有找到任何东西.

那么如何在Ruby(反向正则表达式)中为正则表达式模式生成字符串?

我想要这样的事情:

"/[a-z0-9]+/".example
#tvvd
"/[a-z0-9]+/".example
#yt
"/[a-z0-9]+/".example
#bgdf6
"/[a-z0-9]+/".example
#564fb
Run Code Online (Sandbox Code Playgroud)

"/ [a-z0-9] + /"是我的输入.输出必须是我的正则表达式模式中可用的正确字符串.这里的输出是:tvvd,yt,bgdf6,564fb, "example"方法生成它们.我需要那种方法.

谢谢你的建议.

Мал*_*евъ 8

在Ruby中:

/qweqwe/.to_s
# => "(?-mix:qweqwe)"
Run Code Online (Sandbox Code Playgroud)

当你声明一个Regexp,你有Regexp类对象,将它转换为String类对象时,你可以使用Regexp方法#to_s.在转换过程中,将扩展特殊字段,如示例中所示.使用:

(使用(?opts:source)表示法.这个字符串可以反馈到Regexp :: new到正则表达式,其语义与原始语法相同.

此外,您可以使用Regexp的方法#inspect,其中:

产生一个通常更易读的rxp版本.

/ab+c/ix.inspect        #=> "/ab+c/ix"
Run Code Online (Sandbox Code Playgroud)

注意:是,上述方法仅用于普通转换RegexpString,并以匹配或选择组串到一个另外一个,我们使用其他方法.例如,如果你有一个sourse数组(或者你想用#split方法拆分的字符串),你可以grep它,并得到结果数组:

array = "test,ab,yr,OO".split( ',' )
# => ['test', 'ab', 'yr', 'OO']

array = array.grep /[a-z]/
 # => ["test", "ab", "yr"]
Run Code Online (Sandbox Code Playgroud)

然后将数组转换为字符串:

array.join(',')
# => "test,ab,yr"
Run Code Online (Sandbox Code Playgroud)

或者只是使用#scan方法,略加改变正则表达式:

"test,ab,yr,OO".scan( /[a-z]+/ )
# => ["test", "ab", "yr"] 
Run Code Online (Sandbox Code Playgroud)

但是,如果你真的需要一个与regexp匹配的随机字符串,你必须编写自己的方法,请参考帖子,或者使用ruby-string-random库.图书馆:

根据Regexp语法或模式生成随机字符串.

代码将如下所示:

pattern = '[aw-zX][123]'
result = StringRandom.random_regex(pattern)
Run Code Online (Sandbox Code Playgroud)


Tom*_*ord 6

派对有点晚了,但是 - 最初受到这个stackoverflow线程的启发 - 我创建了一个强大的ruby gem来解决原始问题:

https://github.com/tom-lord/regexp-examples

/this|is|awesome/.examples #=> ['this', 'is', 'awesome']
/https?:\/\/(www\.)?github\.com/.examples #=> ['http://github.com', 'http://www.github.com', 'https://github.com', 'https://www.github.com']
Run Code Online (Sandbox Code Playgroud)


Fra*_*nez 5

您还可以使用Faker gem https://github.com/stympy/faker,然后使用此调用:

 Faker::Base.regexify(/[a-z0-9]{10}/)
Run Code Online (Sandbox Code Playgroud)