Интерполяция строки в регулярное выражение

Переключить поток с помощью запоминающего устройства.

MemoryStream memStream = new MemoryStream();
PdfWriter wri = PdfWriter.GetInstance(doc, memStream);
...
return memStream.ToArray();
143
задан Andrew Marshall 27 October 2013 в 01:13
поделиться

6 ответов

То же как строковая вставка.

if goo =~ /#{Regexp.quote(foo)}/
#...
253
ответ дан Jonathan Lonowski 27 October 2013 в 01:13
поделиться

Обратите внимание, что Regexp.quote в Jon L. 's ответ важен!

if goo =~ /#{Regexp.quote(foo)}/

, Если Вы просто делаете "очевидную" версию:

if goo =~ /#{foo}/

тогда периоды в Вашем тексте соответствия рассматривают, поскольку regexp подстановочные знаки, и "0.0.0.0" будет соответствовать "0a0b0c0".

Примечание также, что, если Вы действительно просто хотите проверить на соответствие подстроки, можно просто сделать

if goo.include?(foo)

, который не требует дополнительного заключения в кавычки или волнения по поводу специальных символов.

109
ответ дан David Hempy 27 October 2013 в 01:13
поделиться
Regexp.compile(Regexp.escape(foo))
6
ответ дан Markus Jarderot 27 October 2013 в 01:13
поделиться

Вероятно Regexp.escape(foo) был бы начальная точка, но там серьезное основание, Вы не можете использовать более стандартную интерполяцию выражения: "my stuff #{mysubstitutionvariable}"?

кроме того, можно просто использовать !goo.match(foo).nil? с литеральной строкой.

6
ответ дан Andrew Marshall 27 October 2013 в 01:13
поделиться

Используйте Regexp.new:

if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/
3
ответ дан Jeremy Ruten 27 October 2013 в 01:13
поделиться
  • 1
    That' s улучшение... Но все еще необходимо было бы вручную повторно упаковать возвращаемые значения функции. Слишком плохо существует not' t названный возвращаемыми параметрами... Если я был квалифицирован для реализации этого, I' d рассматривают запись PEP. Спасибо! – Andrew Wagner 15 December 2009 в 14:42
foo = "0.0.0.0"
goo = "here is some other stuff 0.0.0.0" 

puts "success!" if goo =~ /#{foo}/
-2
ответ дан Mike Breen 27 October 2013 в 01:13
поделиться
  • 1
    Хотя это могло бы технически работать, это - ужасная идея для удобочитаемости. Также я подозреваю, что это не будет на самом деле работать правильно, потому что ссылки на панель не будут скомпилированы как доступ локальной переменной в нечто. – ddaa 13 December 2009 в 21:26
Другие вопросы по тегам:

Похожие вопросы: