[英]How to capture repeated patterns using regex tokenization in C++
我的問題是關於C ++中的正則表達式標記化。
我有以下正則表達式模式:
**const regex PRx ("^ TxD = <(@&[^(@&)]{1,32}@&){2,}>;");**
還有我正在從文件中讀取的以下字符串對象(其中可能有許多字符串):
TxD = <@&Mag@&@&Hael@&@&Io12n@&>;
TxD = <@&Atx@&@&Depoc@&@&Lsadiz@&@&gfhg@&@&kdkdj@&>;
請注意,每個字符串的開頭都有一個空格(如錨^后面的正則表達式PRx中所示)。
以下代碼負責相應地解析上述模式
vector<DFG> IP; // DFG is a class type
vector<int> MIS;
MIS.push_back(1);
const sregex_token_iterator Endx;
for (sregex_token_iterator IPF(DOC.begin(), DOC.end(), PRx, MIS); IPF != Endx;)
{
string SIN = (*IPF).str().c_str();
IPF++;
IP.push_back(DFG(SIN)); /* The constructor of DFG is responsible for pushing SIN to a
vector data member object of string type */
}
如正則表達式模式PRx所示,它試圖捕獲定界符“ @&”之間的所有模式; 但是,問題在於它僅捕獲最后一個匹配的模式。 例如,在第一個字符串中,它將僅報告“ @&Io12n @&”,而在第二個字符串中,它將僅報告“ @&kdkdj @&”。
第一個字符串的預期輸出是(出於說明目的):
@&Mag@&
@&Hael@&
@&Io12n@&
從第二個字符串開始是(出於說明目的):
@&Atx@&
@&Depoc@&
@&Lsadiz@&
@&gfhg@&
@&kdkdj@&
(請注意,上面顯示的輸出將不顯示,而是將找到的每個模式分別保存在SIN向量對象中)
僅當我刪除了模式“ ^ TxD = <”和“>;”時,它才有效。 並從PRx中檢查范圍“ {2,}”,而我不想這樣做。 我不確定為什么它無法捕獲所有模式! 您能否提供對此事的想法和評價。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.