私の個人的なライブラリを開発しているうちに、私はlibstdC++ 6の中にエラーがあると考えました。エラーの妥当性確認
私は確かに、このライブラリは多くの高級熟練者によってレビューされていますので、ここで私の所見を検証し、さらなるステップを支援します。
は、次のコードを考えてみましょう:私は
- プロトコル
- ユーザー/パス(オプション)
- ホスト
- ポートにURLを解析する正規表現を書かれている
#include <regex> #include <iostream> int main() { std::string uri = "http://example.com/test.html"; std::regex reg(...); std::smatch match; std::regex_match(uri, match, reg); for(auto& e: match) { std::cout<<e.str() <<std::endl; } }
を(オプション)
- パス(オプション)
- クエリ
- (オプション)所在地(オプション)
私は(++ c)において、次の正規表現を使用:
std::regex reg("^(.+):\\/\\/([email protected])?([a-zA-Z\\.\\-0-9]+)(:\\d{1,5})?([^?\\n\\#]*)(\\?[^#\\n]*)?(\\#.*)?$");
これはオンラインテスタとMSVC++ 2015 Update 3の中では非常にうまくいきましたホスト部分がホストとパスの両方に一致するビルドホストでは失敗します。
Buildhost:
グラム++(Ubuntuの5.4.0-6ubuntu1〜16.04.2)5.4.0 20160609
のlibstdC++ 6:AMD64 5.4.0-6ubuntu1〜16.04.2
std::regex reg("^(.+):\\/\\/([email protected])?([a-zA-Z\\.0-9\\-]+)(:\\d{1,5})?([^?\\n\\#]*)(\\?[^#\\n]*)?(\\#.*)?$");
は、それが正常に動作します:私はこれに正規表現を変更した場合ので
は、私はこのエラーを検討しますそれはまったく同じように動作するはずです。
失敗正規表現:https://ideone.com/7n2JdK
作業する正規表現:https://ideone.com/6NMPUW
が、私はここで本当に重要な何かを欠場かこれはのlibstdC++ 6内のエラーですか?
唯一の違いは、char型のクラスである:
[a-zA-Z\\.\\-0-9] // not working
[a-zA-Z\\.0-9\\-] // working
おそらく、2つの正規表現の違いを指摘したいと思いますか、誰もが文字を文字で比較することを期待していますか? –
charでcharをチェックする必要はありません。これは明らかにバグです。 –