У вас есть *.
там, где вам нужно .*
. Прямо сейчас квантификатор *
применяется к пробелу перед ним, и точка соответствует ровно одному символу. Переключите два, удалите пробел (это важно, и в этой точке нет пробела в вашей тестовой строке) и попробуйте снова.
Помните, что .*
соответствует жадно, т.е. е. как можно больше символов (кроме новых строк). Так что если у вас не более одного тега <A>
в строке, он все равно должен работать. Вместо этого немного безопаснее было бы .*?
, чтобы точка соответствовала как можно меньшему числу символов; еще безопаснее [^<]*
, который будет соответствовать чему угодно, кроме открывающих угловых скобок, убедившись, что мы не пересекаем границы тегов.
Однако, все эти меры терпят неудачу в определенных, нередких ситуациях (например, комментарии, строки атрибутов, вложенные теги, недопустимая разметка), поэтому вы должны позволять регулярным выражениям проигрывать на языках разметки, только если вы можете точно контролировать свои входные данные и знать ваши ограничения.
Кроме того, я думаю, что в VB.NET вы можете экранировать кавычки внутри строки, удваивая ее, поэтому вы можете просто написать
"<A href=""viewmessage.aspx?message_id=.*?</A>"