あなたが本当に適切なHTMLパーサが必要ですが、迅速かつ汚い何かを、試してみてください。data
が解析されたデータを超えているように更新されることを
bool get_url(char **data, char **url, char **desc)
{
bool result = false;
char *ptr = strstr(*data, "<a");
if(NULL != ptr)
{
*data = ptr + 2;
ptr = strstr(*data, "href=\"");
if(NULL != ptr)
{
*data = ptr + 6;
*url = *data;
ptr = strchr(*data, '"');
if(NULL != ptr)
{
*ptr = '\0';
*data = ptr + 1;
ptr = strchr(*data, '>');
if(NULL != ptr)
{
*data = ptr + 1;
*desc = *data;
ptr = strstr(*data, "</a>");
if(NULL != ptr)
{
*ptr = '\0';
*data = ptr + 4;
result = true;
}
}
}
}
}
return result;
}
ない(それは中-outパラメータだ)とすることを渡された文字列が変更されます。私は怠惰な/メモリが返された文字列を持つ完全なソリューションを行うにはあまりにも忙しい気分です。
また、おそらく、私がそれらを重ねた理由の一部であるクローズスコープブレース(最初のものを除く)のカスケードでエラーを返すべきです。より一般的なものに適合させることができる他のより良いソリューションがあります。
したがって、基本的にはfalseを返すまで関数を繰り返し呼び出します。
本当にHTMLが「...」の場合は、XSLを使用できます。それ以外の場合は、完全なHTMLパーサが必要です。たぶんシェルスクリプト+ ** Lynx **(テキストベースのブラウザ)+ ** awk **。これがワンタイムタスクであれば、エディタで検索/置換します。 (やはり、整形式のXHTMLを想定しています) –
これは単純なhtmlファイルです。 はそれだけです。今、私はライブラリや外部のHTMLパーサを使いたくない。私はちょうどファイルを読んで、URLと説明を解析したい。 – Jessica
それはあなたがCでそれをやろうとしているということがあなたのために難しいと主張されている主な理由は、Cは本当に、本当に*本当に*この種の仕事のために作られていません。より新しい言語は、文字列操作のためにより洗練されたツールを提供します。 Cには実際のテキストタイプが組み込まれていません。あなたがchar \ *とchar [N]を使うと、あなたはそれを偽っています。 –