Это регулярное выражение дает ожидаемый для меня результат:
@"/setcard/\?set=([0-9]*).*?;""\s*>(.*?)</a></td>\s*.*?/msg/\?id=([0-9]*).*?ref\);"">(.*?)</a></td>\s*.*>(.*?)</td>"
Похоже, вы используете метасимвол $
для сопоставления с новыми строками, что неверно. Это утверждение нулевой ширины: оно соответствует позиции перед новой строкой, без использования символа (ов) новой строки. Это означает, что .*
после $
должно потреблять его, но, конечно, точка не соответствует символу новой строки.
В этом случае нет смысла использовать якорь ($
); В любом случае вы должны использовать новые строки, так что просто сопоставляйте их так же, как и любые другие символы. Если бы новые строки были обязательными , я бы предложил использовать [\r\n]+
, что будет соответствовать одному или нескольким любым новым строкам, будь то \r\n
(стиль DOS / Windows), \r
(предварительно -OSX Mac) или \n
(все остальное). Но в этом случае я не думаю, что вам нужно быть таким конкретным; \s*
(ноль или более любых пробельных символов), кажется, работает нормально. Вам также больше не нужен параметр Multiline
.