Boost RegexにてURLを抜き出したい


しゅん  2009-01-20 04:34:30  No: 69483

ここに投稿させて頂くのも場違いかも知れないのですが、VC2005 MFC 「Unicode 文字セットを使用する」設定のプロジェクトで開発しています。
BoostのバージョンはVersion 1.37.0になります。

CString に格納された文字列からURLとおぼしき部分を抜き出したいと思っています。
以下のコードを書いたのですが、どうもうまく有りません。

CString csSource = _T( "文字と文字の間にhttp://sampleurl.com/index.htmlこういったURLが挿入された時にURLだけ抜き出したい" );
WCHAR* pSource;

pSource = csSource.GetBuffer();
wstring szSource = pSource;

boost::wregex regex( _T( "(([a-z]+):)?//([^:/]+)(:([0-9]+))?/([a-zA-Z.0-9?=+%%&/_-]+)" ) );
boost::smatch results;

boost::regex_search( szSource, results, regex );
csSource.ReleaseBuffer();

***

質問1)
実行すると regex_search() は第一引数として char を求められてしまい wchar をどうやって渡して良いか分かりませんでした。
CStringを使わずに char* で全て通すと動作するのですが、CStringと受け渡しがしたく、どうしたら良いかご指導願えないでしょうか?

質問2)
根本的にCStringからURLを抜き出す方法でもっと適した正規表現或いはその手法が有ればご指導願えないでしょうか。

すみませんが、宜しくお願いいたします。


wclrp ( 'o')  2009-01-20 06:33:18  No: 69484

Unicodeで試していないのとバージョン違うから推測だけど
explicitなコンストラクタだから
自動的にCString型であるcsSourceを変換してくれることはない。

regex_searchの第一引数って char なの?
wstring szSource;が渡せるくらいだし
CStringは一時的でconstなら問題なく(const T *)にキャストできるはずで
boost::regex_search( (const wchar *)csSource, results, regex );
ができそうな気もするが

どんな正規表現がいいのかは知らん。


Blue  2009-01-20 18:15:48  No: 69485

>boost::smatch results;
boost::wsmatch results;
じゃないですかね?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加