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

看板C_and_CPP作者 (A-So)時間6年前 (2018/10/07 11:59), 編輯推噓3(306)
留言9則, 2人參與, 6年前最新討論串1/2 (看更多)
問個regular expreesion的問題 因為試了很久還是找不到解 現在想用regex_replace去取代SQL query內的某個字串,條件是那個字串不在註解內 因為SQL的註解寫法有一行的--或# 多行的/* ... */ 然後C++的regex只支援lookahead 處理一行註解還可以,但是多行的就會有問題 目前寫的regex 長這樣 : ^(?:(?!\-\-)(?!\#).)*取代的字串regex 大致上就是遇到--或是#就assert不處理,這樣可以有效跳過單行註解 用類似的邏輯想處理多行註解時就會遇到問題 ^(?:(?!\-\-)(?!\#)(?!\/\*).)*取代的字串regex 因為query可能會長得像SELECT * /*註解*/ from table where... 會導致一遇到/*後面的東西也都不繼續處理 試了半天還是想不到除了先把/*...*/從input query中去掉的解 不知道有沒有版友有類似的經驗可以用C++支援的regex語法處理跳過這種情況做replace -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 80.57.62.150 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1538913565.A.D1F.html

10/07 20:26, 6年前 , 1F
可包含空白的任意字元規則用 [\s\S] 比較好,然後最好設成
10/07 20:26, 1F

10/07 20:26, 6年前 , 2F
換行才對
10/07 20:26, 2F

10/07 20:27, 6年前 , 3F
非貪婪模式,也就是[\s\S]後面加上*?
10/07 20:27, 3F

10/07 20:31, 6年前 , 4F
或是+?
10/07 20:31, 4F

10/07 20:32, 6年前 , 5F
\/\*[\s\S]+?\*\/ 這是找/* */ 內包含任意內容的規則
10/07 20:32, 5F

10/07 20:34, 6年前 , 6F
若是還解決不了就轉去 Regex 版問看看吧
10/07 20:34, 6F

10/07 20:34, 6年前 , 7F
Regexp才對
10/07 20:34, 7F

10/07 20:38, 6年前 , 8F
正規表示法規則還是要買一本專書來學才能學得透徹
10/07 20:38, 8F

10/08 06:29, 6年前 , 9F
嗯嗯感謝 我希望做的是忽略/**/取代其他 看來還是不行
10/08 06:29, 9F
boy770329:轉錄至看板 RegExp 10/08 06:30
文章代碼(AID): #1RkVKTqV (C_and_CPP)
文章代碼(AID): #1RkVKTqV (C_and_CPP)