我想匹配模式(包括方括号,等号,引号)
[fixedtext="sometext"]
什么是正确的正则表达式?
任何内容都可能出现在引号内。 ' FIXEDTEXT'是固定的。
答案 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);
}