То, что я пытаюсь сделать, - это заменить блок текста (не заканчивающийся новыми строками) способом шаблона. Блок, который я хочу заменить, выглядит примерно так (чтобы сделать его более читабельным, я поместил значения переменных в скобки):
[varA][varB]_begin[varC]
content line 1
content line 2
...
[varA][varB]_end[varC]
И я хочу заменить все, включая первый varA и последний varC.
Я собрал скелет регулярного выражения, чтобы соответствовать этому. Итак, предположим, что varA были "<%" и varB были "block", а varC были "%>", регулярное выражение должно быть:
/<%block_beg%>(.*)<%block_end%>/m/
Я подтвердил, что этот шаблон должен работать (через rubyxp)
Но, конечно, это не так просто, потому что значения, которые мы использовали для varA, varB и varC в предыдущих примерах, должны предоставляться динамически.
Учитывая то, что я понимаю о gsub () Руби, по моей оценке должно работать следующее:
gsub(/#{@varA}#{@varB}_beg#{@varC}(.*)#{@varA}#{@varB}_end#{@varC}/m, old_str)
Код работает без ошибок, но также ничего не заменяет. Может кто-нибудь сказать мне, почему это не работает? Должен ли я придерживаться другого подхода?
Пост-Примечание 1: @ связаны с тем, что переменные являются свойствами класса.
Пост-Примечание 2: Я исправил несколько вещей, и они все еще не работают. Теперь у меня есть:
@content.gsub(/#{Regexp.escape(@varA)}#{Regexp.escape(@varB)}_beg#{Regexp.escape(@varC)}(.*)#{Regexp.escape(@varA)}#{Regexp.escape(varB)}_end#{Regexp.escape(@varC)}/m)
Кто-нибудь знает, почему это не работает?