代码之家  ›  专栏  ›  技术社区  ›  Parth Patel

正则表达式不起作用将跟踪报价

  •  -1
  • Parth Patel  · 技术社区  · 8 年前

    我有正则表达式来删除可能以引号开始和结束的匹配字符串。所以我创建了一个正则表达式来实现这一点。

    String str = "#TEST_ENV_TEST_VAR=\"value\"";
    Pattern p = Pattern.compile("#TEST_ENV_(.*)=\"?(.*)\"?");
    Matcher matcher = p.matcher(str);
    matcher.find()
    String key = matcher.group(2);
    

    key 字符串是 value" value 对,因为我们添加了 ? 最后。

    我尝试使用 []? *

    2 回复  |  直到 8 年前
        1
  •  1
  •   Yassin Hajaj    8 年前

    你不需要最后一个 ? (.*) 一开始就停下来 "

    #TEST_ENV_(.*)=\"?(.*)\"
    

    Demo


    否则,如果目标只是匹配引号之间的字符串,则可以简单地使用正向lookaheads和lookbehinds

    (?<=\").*(?=\")
    

    Demo

        2
  •  0
  •   Nyerguds    8 年前

    这将正确匹配您的资料:

    #TEST_ENV_([^=]*)=(\"?)([^\"]*)\2
    

    这包括:

    • #TEST_ENV_ 一串
    • 等号本身
    • 可选报价,如第2组
    • 报价的内容,定义为“任何非报价的内容”

    Test it yourself .