Я хочу проанализировать следующий текст с помощью Regex с помощью тега функции.Вложенные теги Regex
Anwers: <function>2+2
<function>1+3</function>
</function>.
Thanks for your time.
<function>sayGoodbye()
<function>10*10</function>
writeYourName()
</function>
Ниже рекурсивный метод, который должен преобразовать данный текст в:
Ответы: 44. Спасибо за ваше время. До свидания 100 рексов.
private static readonly string TagFormulaStart = "<function>";
private static readonly string TagFormulaEnd = "</function>";
public static string Calculate(string formula)
{
var pattern = string.Format("{0}(((.|\r|\n)*?)){1}", TagFormulaStart, TagFormulaEnd);
var matches = Regex.Matches(formula, pattern);
if (matches.Count == 0)
{
return formula;
}
else
{
var firstAppearanceOfTAG = matches[0].ToString();
var formulaToCalculate = firstAppearanceOfTAG.Replace(TagFormulaStart, string.Empty).Replace(TagFormulaEnd, string.Empty);
var result = BgProcessorLib.Evaluator.EvaluateString(formulaToCalculate, null, false);
formula = formula.Replace(firstAppearanceOfTAG, result);
return Calculate(formula);
}
}
Проблема заключается в том, что мое регулярное выражение /<function>(((.|\r|\n)*?))<\/function>/igm
в случае вложенных тегов остановится при первом появлении конца функции тега.
Прикрепленный файл, чтобы сделать его более четким.
Если вы работаете в C# и используете .NET regex, тестирование регулярного выражения на сайте, которое поддерживает только JS-regex, бессмысленно. –
Вы уверены, что хотите разбора XML с регулярными выражениями? Есть много готовых «колес», называющих парсеры XML. –
@NikolayProkopyev это не XML. – POIR