Сначала поговорим о регулярном выражении, которое вы используете для удаления тегов, <(.|\n)*?>
.Если вы хотите, чтобы точка соответствовала чему-либо , включая символ новой строки, вам следует использовать однострочный режим.Он также известен как режим DOTALL в некоторых вариантах, потому что это то, что он делает: позволяет точке соответствовать символам новой строки.Вы можете использовать для этого флаг RegexOptions.Singleline или встроить его в регулярное выражение с помощью встроенного модификатора:
`(?s)<.*?>`
Это все еще довольно хрупко, но я оставлю это, потому что нет способасделать его пуленепробиваемым;регулярные выражения и HTML в корне несовместимы.
Что касается второй замены, первое, что вам нужно сделать, это разбить эти вызовы связанных методов - фактически, я бы сказал, что они никогда не должны были быть связаны.Подача результата Regex.Replace непосредственно в String.Replace является либо ошибкой, либо слишком умной.В любом случае, у вас есть , чтобы разделить их, если вы хотите дважды вызвать Regex.Replace.
Вам также необходимо экранировать любые метасимволы регулярных выражений в поисковом выражении, предполагая, что вы все еще хотите это сделатьбуквальный поиск, а не поиск по регулярному выражению.Для этого вы можете использовать метод Escape.
string searchText = Request.QueryString["search"].Trim();
string encodedValue = Server.HtmlEncode(searchText);
string escapedValue = Regex.Escape(encodedValue);
string contentText = Content.Text;
contentText = Regex.Replace(contentText, @"(?s)<.*?>", string.Empty);
contentText = Regex.Replace(contentText, escapedValue,
"<font class='highlight2'>$&</font>", RegexOptions.IgnoreCase);
Content.Text = contentText;
В вашем коде есть еще несколько вещей, которые мне не кажутся правильными (например, почему вы, кажется, навсегда удаляете все теги), ноЯ пытаюсь сосредоточиться на вашем актуальном вопросе.С этой целью я попытался внести минимально необходимые изменения в код, чтобы проиллюстрировать мой ответ.Но есть еще одна вещь, которую я просто должен прокомментировать:
catch
{
// do nothing
}
Не делайте этого.По крайней мере, отправьте сообщение об ошибке на консоль или сбросьте исключение для вызывающего кода, чтобы иметь дело с ним, но никогда молча не проглотит их.