作者boy770329 (A-So)
看板RegExp
標題Fw: [問題] regex_replace取代非comment內的內容
時間Mon Oct 8 06:30:28 2018
※ [本文轉錄自 C_and_CPP 看板 #1RkVKTqV ]
作者: boy770329 (A-So) 看板: C_and_CPP
標題: [問題] regex_replace取代非comment內的內容
時間: Sun Oct 7 19:59:22 2018
問個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
推 art1: 可包含空白的任意字元規則用 [\s\S] 比較好,然後最好設成 10/07 20:26
→ art1: 換行才對 10/07 20:26
→ art1: 非貪婪模式,也就是[\s\S]後面加上*? 10/07 20:27
推 art1: 或是+? 10/07 20:31
→ art1: \/\*[\s\S]+?\*\/ 這是找/* */ 內包含任意內容的規則 10/07 20:32
→ art1: 若是還解決不了就轉去 Regex 版問看看吧 10/07 20:34
→ art1: Regexp才對 10/07 20:34
推 art1: 正規表示法規則還是要買一本專書來學才能學得透徹 10/07 20:38
→ boy770329: 嗯嗯感謝 我希望做的是忽略/**/取代其他 看來還是不行 10/08 06:29
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 轉錄者: boy770329 (80.57.62.150), 10/08/2018 06:30:28
推 art1: 或許你可以用前面提到的正規網站提供無法成功取代的連結 10/10 22:48
→ art1: 前面這個板上的文章提到的正規網站 10/10 22:49
推 asglay: 先寫個regex把/*...*/取代成空字串再丟進SQL裡query如何? 10/15 06:06