作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1538913565.A.D1F.html
1F:推 art1: 可包含空白的任意字元规则用 [\s\S] 比较好,然後最好设成 10/07 20:26
2F:→ art1: 换行才对 10/07 20:26
3F:→ art1: 非贪婪模式,也就是[\s\S]後面加上*? 10/07 20:27
4F:推 art1: 或是+? 10/07 20:31
5F:→ art1: \/\*[\s\S]+?\*\/ 这是找/* */ 内包含任意内容的规则 10/07 20:32
6F:→ art1: 若是还解决不了就转去 Regex 版问看看吧 10/07 20:34
7F:→ art1: Regexp才对 10/07 20:34
8F:推 art1: 正规表示法规则还是要买一本专书来学才能学得透彻 10/07 20:38
9F:→ boy770329: 嗯嗯感谢 我希望做的是忽略/**/取代其他 看来还是不行 10/08 06:29
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: boy770329 (80.57.62.150), 10/08/2018 06:30:28
10F:推 art1: 或许你可以用前面提到的正规网站提供无法成功取代的连结 10/10 22:48
11F:→ art1: 前面这个板上的文章提到的正规网站 10/10 22:49
12F:推 asglay: 先写个regex把/*...*/取代成空字串再丢进SQL里query如何? 10/15 06:06