java中的正则表达式提取特定模式

时间:2018-03-27 18:10:57

标签: java regex

我想匹配模式(包括方括号,等号,引号)

[fixedtext="sometext"]

什么是正确的正则表达式?

任何内容都可能出现在引号内。 ' FIXEDTEXT'是固定的。

2 个答案:

答案 0 :(得分:-1)

你的基本解决方案(虽然我对这一点持怀疑态度,根据评论)基本上是:

  "\\[fixedtext=\\\"(.*)\\\"\\]"

解析为:

  "\[fixedtext=\"(.*)\"\]"

简单地转义[]和引号。 (。*)表示将引号中的所有内容捕获为捕获组(matcher.group(1))。

但是如果你有一串,例如' [fixedtext =" abc \"] def"]'你得到的答案是abc \而不是abc \"] def。

如果您知道结束括号结束该行,请使用:

  "\\[fixedtext=\\\"(.*)\\\"\\]$"

(在末尾添加$以标记行尾),这应该相当可靠。

答案 1 :(得分:-1)

我的建议是使用命名捕获组。 你可以在这里找到更多细节: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

以下是您输入的示例:

String input = "[fixedtext=\"sometext\"]";

Pattern pattern = Pattern.compile("\\[(?<field>.*)=\"(?<value>.*)\"]");
Matcher matcher = pattern.matcher(input);

if (matcher.matches()) {
  System.out.println(matcher.group("field"));
  System.out.println(matcher.group("value"));
} else {
  System.err.println(input + " doesn't match " + pattern);
}