Регулярные выражения с переменным паттерном - C#
Формулировка задачи:
Мне нужно отправлять личные сообщения людям из небольшого списка на одном форуме. За один раз можно отправлять сообщения пяти пользователям. Но, у некоторых из них приём сообщений отключён, у некоторых ящик заполнен. Если сообщение не удаётся отправить - сайт выводит приблизительно такой блок с ошибкой:
Текст сообщения об ошибке - может быть разным. Мне нужно знать есть ли на странице page сообщение об ошибке, и если есть - то вытянуть оттуда username, на которое ругается сайт.
Мне известны пять вариантов username: username1, username2, username3, username4, username5.
Если ошибка и будет - то в <ul class="blockrow error"></ul> будет одно из этих пяти имён.
Вообще в тупике. Тут и многострочность, и один из нескольких вариантов.
Помогите, пожалуйста, составить регулярное выражение, для решения этой ситуации. А может можно обойтись без них?
<div class="blockbody errorblock">
<h3 class="blocksubhead">При размещении сообщения были допущены следующие ошибки:</h3>
<ul class="blockrow error">
<li>Вы не можете отправить сообщение username, поскольку он(а) решил(а) не принимать личные сообщения, либо ему(ей) не разрешена эта опция.</li>
</ul>
</div>
Решение задачи: «Регулярные выражения с переменным паттерном»
textual
Листинг программы
string GetErrorUserName(string html)
{
string[] users = {"vasya", "vasya13",...} // список пользователей
Regex regex = new Regex(@"<ul class=""blockrow error\"">.+</ul>", RegexOptions.Singleline);
string result = regex.Match(html); //Получили ошибку
if (!result.Success)
return null;
string value = regex.Value;
foreach(string user in users)
if (value.Contains(user))
return user;
return "Unknown user";
}