たとえば、タイトルに記載されているフォーマットで時間を見つけなければなりません(ただし、%
タグの順序は異なる可能性があります)"The date is 2009-August-25."
どのようにプログラムをタグに埋め込み、どのような構造を日付文字列の特定の部分をどのように動作させるかについての情報とともに格納するために使用する方が良いでしょうか?マスクを持つ文字列を解析する必要があります(この "%yr-%mh-%dy"のような)ので、int値を取得します
答えて
最初にboost::date_time
ライブラリを参照してください。それはIO system魔女があなたが欲しいものかもしれないが、私は検索の欠如を参照してください。
カスタム検索を行うにはboost::xpressive
が必要です。それはあなたが必要とするものを含んでいます。私の急いで嘆いた例を見てみましょう。まず、カスタムパターンを解析する必要があります.Xpressiveでは簡単です。あなたが必要とするヘッダを初めて目:
#include <string>
#include <iostream>
#include <map>
#include <boost/xpressive/xpressive_static.hpp>
#include <boost/xpressive/regex_actions.hpp>
//make example shorter but less clear
using namespace boost::xpressive;
第二には、あなたの特別なタグのマップを定義します。
std::map<std::string, int > number_map;
number_map["%yr"] = 0;
number_map["%mh"] = 1;
number_map["%dy"] = 2;
number_map["%%"] = 3; // escape a %
次のステップは、正規表現魔女はタグで私たちのパターンを解析し、変数にマップから値を保存します作成することです
int tag_id;
sregex rx=((a1=number_map)|(s1=+~as_xpr('%')))[ref(tag_id)=(a1|-1)];
詳しい情報や説明を見hereとhereを:それはタグを見つけるか、セーブ-1それ以外TAG_ID。
std::string pattern("%yr-%mh-%dy"); // this will be parsed
sregex_token_iterator begin(pattern.begin(), pattern.end(), rx), end;
if(begin == end) throw std::runtime_error("The pattern is empty!");
sregex_token_iterator
が私たちのトークンを反復処理し、それぞれの時間は、それがTAG_ID varibleを設定します: は今、いくつかのパターンを解析することができます。このトークンを使って正規表現を構築するだけです。私たちは、アレイ内で定義された静的正規表現のタグ対応する部品を使用してこの正規表現を構築します:
sregex regex_group[] = {
range('1','9') >> repeat<3,3>(_d), // 4 digit year
as_xpr("January") | "February" | "August", // not all month XD so lazy
repeat<2,2>(range('0','9'))[ // two digit day
check(as<int>(_) >= 1 && as<int>(_) <= 31) ], //only bettwen 1 and 31
as_xpr('%') // match escaped %
};
は最後に、私たちの特別な正規表現を構築し始めることができます。最初の試合では最初の試合が始まります。タグが一致したとTAG_IDたちは、アレイから正規表現を選択する非負であるされている場合は、それ以外の試合はおそらく、区切り文字であり、我々はそれに一致する正規表現魔女の構築:
sregex custom_regex = (tag_id>=0) ? regex_group[tag_id] : as_xpr(begin->str());
次の我々は次の正規表現を終了し、追加し始めから繰り返されます:
while(++begin != end)
{
if(tag_id>=0)
{
sregex nextregex = custom_regex >> regex_group[tag_id];
custom_regex = nextregex;
}
else
{
sregex nextregex = custom_regex >> as_xpr(begin->str());
custom_regex = nextregex;
}
}
今私達の正規表現は準備ができている、いくつかの日付を見つけることができます: - ]
std::string input = "The date is 2009-August-25.";
smatch mydate;
if(regex_search(input, mydate, custom_regex))
std::cout << "Found " << mydate.str() << "." << std::endl;
をxpressiveライブラリは非常に強力かつ高速です。それはパターンの美しい使用です。
あなたは、この例のように、私はコメントやポイント;-)
に知らせた場合私はタグ付き文字列を正規表現で変換し、3つのフィールドのキャプチャと検索します。正規表現の複雑さは、あなたが%yrに対して受け入れたいものによって決まります。あまり厳密でない式を使用して有効な値を確認することもできます。これにより、より正確なエラーメッセージ(「日付が見つかりません」の代わりに「無効な月:Augsut」)またはコンテキストに応じて誤検出につながる可能性があります。
- 1. は、私はC#で、このような文字列を解析する必要がある文字列
- 2. 私はそのような文字列から数値を取得する必要があり、文字列
- 3. json形式の文字列を解析する必要があります
- 4. vb.netの文字列を解析する必要があります
- 5. は、文字列の解析に役立つ必要があります。
- 6. 私は、この文字列を解析する必要がPHP
- 7. は、私はこのようになり、サーバから取得したHTML文字列を持つカスタム解析
- 8. 必要なデータを取得するために文字列を解析する
- 9. RegExを使用してテキストを解析しますか?私はこのようになりますテキストから値を解析する必要があり
- 10. 列挙型:列挙型の名前ではなく、そのint型の値を文字列として取得する必要があります
- 11. この文字列の値だけを解析して取得する方法
- 12. SweetのInt値14を得るために "14px"のような文字列を解析する方法
- 13. 文字列内の "単語"の後に文字列を取得する必要があります。#
- 14. 文字列の値をhtmlページから取得し、xmlのカテゴリに格納する必要があります
- 15. intを解析するためにArrayIndexOutOfBoundsExceptionエラーが発生します。しかし、私はそのintを解析する必要がありますか?
- 16. 私はこのようになります文字列持つ
- 17. は、区切り文字は私が解析する必要が以下の文字列を持っている
- 18. は、私はこのようになります文字列持つ文字列
- 19. 私は、文字列を分解し、そのような文字列の各部分を取得することができることができるようにする必要があり、他の文字列
- 20. は、文字列の最初の文字を削除し、私はこの文字列の最初の文字を取得する必要があり、文字列
- 21. 文字列をINT Cプログラミングに構文解析します
- 22. マスク文字列を持つ文字列
- 23. スウィフト - URLを含む文字列を解析し、この文字列を解析することができますどのように
- 24. ハスケルタプルを挿入する文字列を解析する(Int、Int)
- 25. 数値の配列を持つオブジェクトを持つことは、合計する必要があります
- 26. が、私はこのようになります文字列を解析する必要がある正規表現
- 27. Python3でJSONを解析する必要があります
- 28. 文字列の最後からintを取得する方法intにint型の文字列が含まれている可能性があります。
- 29. "7.8.9.1.5.1.100"のような文字列の後に最後の数字を抽出する必要があります
- 30. 配列として配列のような文字列を解析します。