在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}/)