Re: [問題] regex_replace取代非comment內的內容

作者: cutekid (可愛小孩子)   2018-10-08 18:21:26
以下處理 /* */ 這種的註解
#include <iostream>
#include <regex>
using namespace std;
int main() {
string text = "\/*comment 1*\/text1\n\/*comment 2*\/text2\n";
string pattern = "([\\s\\S]*?)((?:\/\\*[\\s\\S]+?\\*\/)|$)";
regex re(pattern);
cout << "pattern: " << pattern << endl;
cout << regex_replace(text,re,"$2");
return 0;
}
程式: https://ideone.com/7eCkXG
參考: http://www.cplusplus.com/reference/regex/regex_replace/
※ 引述《boy770329 (A-So)》之銘言:
: 問個regular expreesion的問題 因為試了很久還是找不到解
: 現在想用regex_replace去取代SQL query內的某個字串,條件是那個字串不在註解內
: 因為SQL的註解寫法有一行的
作者: art1 (人,原來不是人)   2018-10-08 22:42:00
原來是沒把 \ 逸出的關係c++ 沒支援 raw string 真可惜
作者: thefattiger (LT)   2018-10-08 22:46:00
committee:我們聽到了估狗了一下, C++有raw string耶,類似Python的寫法
作者: art1 (人,原來不是人)   2018-10-08 23:23:00
原來有,那用 raw string 還是比較方便,逸出好麻煩的
作者: LPH66 (-6.2598534e+18f)   2018-10-09 17:19:00
raw string 是 C++11 才有的新語法喔, 不過比 python 方便C++11 的 raw string 有多一對括號, 括號外還能塞東西這些都是用來避免已經寫了 raw string 還要跳脫東西
作者: art1 (人,原來不是人)   2018-10-10 22:44:00
不懂擷取 group 2 的目的是什麼,如果是我的話會寫成這樣([\\s\\S]*?)(?:\/\\*[\\s\\S]+?\\*\/|$)
作者: cutekid (可愛小孩子)   2018-10-11 00:08:00
非註解替換,保留註解

Links booklink

Contact Us: admin [ a t ] ucptt.com