Использование Regex для генерации строк, а не для их соответствия - PullRequest
94 голосов
/ 22 августа 2008

Я пишу утилиту Java, которая помогает мне генерировать множество данных для тестирования производительности. Было бы действительно круто иметь возможность указать регулярное выражение для строк, чтобы мой генератор выплевывал вещи, которые соответствуют этому. Есть ли что-то там уже запеченное, что я могу использовать для этого? Или есть библиотека, которая помогает мне в этом?

Спасибо

Ответы [ 11 ]

0 голосов
/ 11 ноября 2008

Это далеко от поддержки полного регулярного выражения PCRE, но я написал следующий метод Ruby, чтобы взять строку, подобную регулярному выражению, и создать ее вариант. (Для языка CAPTCHA.)

# q = "(How (much|many)|What) is (the (value|result) of)? :num1 :op :num2?"
# values = { :num1=>42, :op=>"plus", :num2=>17 }
# 4.times{ puts q.variation( values ) }
# => What is 42 plus 17?
# => How many is the result of 42 plus 17?
# => What is the result of 42 plus 17?
# => How much is the value of 42 plus 17?
class String
  def variation( values={} )
    out = self.dup
    while out.gsub!( /\(([^())?]+)\)(\?)?/ ){
      ( $2 && ( rand > 0.5 ) ) ? '' : $1.split( '|' ).random
    }; end
    out.gsub!( /:(#{values.keys.join('|')})\b/ ){ values[$1.intern] }
    out.gsub!( /\s{2,}/, ' ' )
    out
  end
end

class Array
  def random
    self[ rand( self.length ) ]
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...