Получение определенных, неспецифических вхождений строки с помощью RegEx

0

Итак, я пишу приложение С# WinForms для захвата изображений из 4chan.
Недавно изображения были размещены в другом домене, поэтому я пытался использовать RegEx для сканирования html-кода потока из домена boards.4chan.org и использования его для поиска соответствующего изображения на i.4cdn.org где они теперь хранятся. Я делаю это так, чтобы я мог загружать отдельные потоки вместо всей доски.

private void DownloadImages(string saveDir, string board, string threadNum, string fileType)
{  
    string htmlString;
    int imageNum = 0;  
    WebClient wc = new WebClient();
    try  
    {
        htmlString = wc.DownloadString("http://boards.4chan.org/" + board + "/res/" + threadNum);
    }
    catch(Exception ex)
    {
        txtOutput.Text = ex.ToString();
        return;
    }
    txtOutput.Text = "Found thread!";

    MatchCollection allMatchResults;
    Regex regexObj = new Regex("//i.4cdn.org/" + board + "/src/*." + fileType,RegexOptions.Singleline);
    allMatchResults = regexObj.Matches(htmlString);

    foreach(Match match in allMatchResults)
    {
        txtOutput.Text = match.ToString();

        try
        {
            //txtOutput.Text = "Downloading file ";
            wc.DownloadFile("http:" + match.Value.ToString() + "." + fileType, saveDir + imageNum + "." + fileType);
            Thread.Sleep(1000);
            imageNum++;
        }
        catch (Exception x)
        {
            txtOutput.Text = x.ToString();
            return;
        }        
    }
}

Теперь я не использовал RegEx через некоторое время, и я не использовал его с С# в прошлом, поэтому я не уверен, что я делаю это совершенно неправильно или нет. Я пытаюсь, чтобы он разобрал htmlString для любых совпадений с //i.4cdn.org адресом //i.4cdn.org, с //i.4cdn.org доски и типа файла (они из checkListBoxes в форме, для специфики).

У меня он захватывает источник веб-страницы в строку, чтобы я мог проанализировать ее и искать URL-адреса изображений, которые затем позволят мне найти соответствующие изображения в домене 4cdn.

Моя проблема в том, что, хотя я получаю сообщение "Найденный поток", как и следовало ожидать, программа никогда не продвигается дальше этого момента - кажется, никогда не входит в цикл foreach.

Если есть лучший способ сделать это, я открыт для предложений. Я прочитал, что не пытаюсь разобрать html с RegEx.. но я предположил, что я буду в порядке, так как это не тот самый html, который я ищу.

Теги:

1 ответ

1
Лучший ответ

Фактическое регулярное выражение означает следующее:

Изображение 174551

Поэтому используйте это регулярное выражение:

new Regex("//i.4cdn.org/" + board + "/src/[^.]+\\." + fileType, RegexOptions.Singleline);

что значит

Изображение 174551

  • 0
    Большое спасибо. Спасибо сработало отлично!
  • 0
    @MattMiller Не за что;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню