如何制作与符号匹配的正则表达式(,“和==

时间:2013-12-10 08:57:56

标签: java regex

我希望从长文本文件中获取if ("==之间的所有文字以及]", [newline + spaces] "", false之间的文字。

我是正则表达式的新手,我很难完成这个任务。对于第一个我提出了if ("(.*?)" ==,但如果我在一个文件中使用它,其字符串条目类似于:

if ("drinks" == selectedValue) {
            productSelect.options[productSelect.options.length] = new Option("lipton ice tea  [1.71]",
                "lipton ice tea", false, false);
        }

使用这种模式:

String pattern1 = "if (\"";
String pattern2 = "\" ==";
Matcher m = Pattern.compile("if (\"(.*?)\" ==").matcher(str);

或像这样的简短形式:

Matcher m = Pattern.compile("if (\"(.*?)\" ==").matcher(str);

我得到的错误是==之后有一个未关闭的组。

对于其他正则表达式,存在类似的错误。我怀疑这是因为没有转义像("这样的字符,但无法找到如何执行这些操作。如果有经验的人能够向我解释如何修复这些正则表达式并愉快地解析,我将非常感激。

额外奖励:我还要在[]之间解析小数价格。我会在同一时间研究这个问题。

3 个答案:

答案 0 :(得分:1)

也逃避括号:

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

找到你的小数:

"\\[\\d+\\.\\d+\\]"

答案 1 :(得分:1)

问题“(”是它是一个元字符(如你所知),你必须用“\”(因为java字符串语法而加倍\)来重复它。

快速举例......玩它:

public class RegExpTest {

  public static void main(String[] args) {

    String text =
        "if (\"drinks\" == selectedValue) {\nproductSelect.options[productSelect.options.length] = new Option(\"lipton ice tea  [1.71]\",\n\"lipton ice tea\", false, false);\n}";
    String patternString = "if \\(\"(.*)==";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(text);

    if (matcher.find()) {
      System.out.println("Result: '" + matcher.group(1) + "'");
    }
  }
}

结果:'喝''

答案 2 :(得分:1)

final Matcher one = Pattern.compile(Pattern.quote("if (\"") + "([a-zA-Z]+)" + Pattern.quote("\" == ")).matcher(str);
final Matcher two = Pattern.compile(Pattern.quote("]\",") + "(?:\\s+)?\"([a-zA-Z\\s]+)" +Pattern.quote("\", false")).matcher(str);

if (one.find() && two.find())
    System.out.println(one.group(1) + " " + two.group(1));

出去:喝冰镇冰茶