代码之家  ›  专栏  ›  技术社区  ›  Seymour

regex替换自动SQL代码创建者

  •  -1
  • Seymour  · 技术社区  · 6 年前

    我在里面写了一个剧本 R 它自动创建一个非常长和复杂的SQL查询,以在5个数据库的类似表上创建一个视图。

    当然,还有一些集成问题需要解决。唯一能让这件事发生的就是我现在要呈现给你们的问题。

    考虑到一根很长的绳子

    '"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",'
    

    我的目标是取代

    • 这个字符串 '"/*' 用这个字符串 '/*'
    • 这个字符串 '*/",' 用这个字符串 '*/'

    我尝试过:

    gsub('"/*', '/*', '"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",')
    

    但它返回字符串

    '/**NOTES*//*, /**TABLE_ID*//*, /**TABLE_SUB_ID*//*, /**TABLE_SUB_SUB_ID*//*, /*OTHER_COLUMNS/*,'
    

    鉴于 我的预期输出 是以下字符串:

    '/*NOTES*/ /*TABLE_ID*/ /*TABLE_SUB_ID*/ /*TABLE_SUB_SUB_ID*/ "OTHER_COLUMNS",'
    

    注意*不是转义的,但它表示开始( /* )结束( */ )SQL编译器将运行字符串时的注释数

    1 回复  |  直到 6 年前
        1
  •  2
  •   r2evans    6 年前

    gsub('"?(/\\*|\\*/)"?', '\\1', '"/*NOTES*/", "/*TABLE_ID*/", "/*TABLE_SUB_ID*/", "/*TABLE_SUB_SUB_ID*/", "OTHER_COLUMNS",')
    # [1] "/*NOTES*/, /*TABLE_ID*/, /*TABLE_SUB_ID*/, /*TABLE_SUB_SUB_ID*/, \"OTHER_COLUMNS\","
    

    '\a\b\f\n\r\t\v'
    # [1] "\a\b\f\n\r\t\v"
    '\u0101' # unicode, numbers are variable
    # [1] "a"
    '\x0A'   # hex, hex-numbers are variable
    # [1] "\n"