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

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

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

re.sre_parse.parse(pattern) #..... ('range', (97, 122)) .... 

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

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

我想要这样的事情:

 "/[a-z0-9]+/".example #tvvd "/[a-z0-9]+/".example #yt "/[a-z0-9]+/".example #bgdf6 "/[a-z0-9]+/".example #564fb 

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

谢谢你的建议。

在Ruby中:

 /qweqwe/.to_s # => "(?-mix:qweqwe)" 

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

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

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

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

 /ab+c/ix.inspect #=> "/ab+c/ix" 

注意:上述方法仅用于将Regexp简单转换为String ,并且为了匹配或选择一组字符串到另一个上,我们使用其他方法。 例如,如果你有一个sourse数组(或者你希望用#split方法拆分的字符串),你可以grep它,并得到结果数组:

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

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

 array.join(',') # => "test,ab,yr" 

或者只使用#scan方法,稍微更改#scan regexp:

 "test,ab,yr,OO".scan( /[az]+/ ) # => ["test", "ab", "yr"] 

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

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

代码将如下所示:

 pattern = '[aw-zX][123]' result = StringRandom.random_regex(pattern) 

派对有点晚了,但是 – 最初受到这个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'] 

也许你可以在这里找到你想要的东西 。

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

  Faker::Base.regexify(/[a-z0-9]{10}/) 
Interesting Posts