Java中{{
和}}
之间的正则搜索关键字是什么。
示例String = "kksdkjhsd {{one}} sdkjhsdjksd {{two}}"
我想要output = ["one","two"];
我已经尝试过在Java Regex to get Data between curly brackets中建议的方法。
单支撑可以正常工作,但我不能将它扩展为双花({{ }}
)括号
答案 0 :(得分:5)
此代码应符合您的要求:
Matcher m = Pattern.compile("\\{\\{([^\\}]*)\\}\\}").matcher(word);
while (m.find()){
System.out.println(m.group(1));
}
此正则表达式会将{{
}}
中的所有文字都归结为}
个字符。此正则表达式不处理{{{}}}
之类的案例限制,在这种情况下会返回{
,因为只有前两个{{
匹配。
如果您需要一个与范围内的单个花括号匹配的正则表达式,我们需要一个更复杂的解决方案。
另一件事,使用字符类([^\\}]*)
使正则表达式比(.*?)
更有效,因为它将停止搜索第一个字符,而不是一个封闭的大括号。
答案 1 :(得分:2)
您可以使用正则表达式:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static final String REGEX_START = Pattern.quote("{{");
public static final String REGEX_END = Pattern.quote("}}");
public static final Pattern PATTERN = Pattern.compile(REGEX_START + "(.*?)" + REGEX_END);
public static void main(String[] args) {
String input = "kksdkjhsd {{one}} sdkjhsdjksd {{two}}";
List<String> keywords = new ArrayList<>();
Matcher matcher = PATTERN.matcher(input);
// Check for matches
while (matcher.find()) {
keywords.add(matcher.group(1)); // Group one is necessary because of the brackets in the pattern
}
// Print
keywords.forEach(System.out::println);
}
}
这将为您提供{{
和}}
之间的所有内容,以便您获得如下结果:
one
two
答案 2 :(得分:0)
您可以尝试使用正则表达式[{][{].*?[}][}]
。它使用不情愿的量词*?
,它匹配零个或多个字符,但是以非贪婪的方式,因此,一旦它开始匹配{{
,它将在它遇到的第一个}}
处停止,而不是一直到字符串的末尾并匹配 last }}
。
作为一个有趣的额外内容,它可以匹配hey {{ how {} are }} you
之类的内容,并生成how {} are
作为输出,而基于[^}]*
的正则表达式不能。{/ p>