我正在努力获取文字" STARTS WITH"从使用正则表达式的字符串[DOC TEXT] STARTS with [foo]开始。我已经使用了以下代码。
String expertWhereClause = (String) formFields
.get(Constants.EXPERT_SEARCH_WHERECLAUSE);
String delims = "\\[(.*?)\\]";
String[] tokens = expertWhereClause.split(delims);
但我正在追踪字符串" [,STARTS WITH]"。我只想要" STARTS WITH"。
是正则表达式的新手,请在这里帮助我。
提前致谢
答案 0 :(得分:3)
您可以使用Matcher
:
Matcher m = Pattern.compile("\\]([^\\[]*)\\[").matcher("[Hello]world[!!!]");
while (m.find()) {
System.out.println(m.group(1));
}
这个代码片段prints world
在ideone上。
请注意我将正则表达式更改为使用[^\\[]*
代替.*?
。 This improves efficiency,这对于更长时间的输入可能很重要。
答案 1 :(得分:1)
使用此正则表达式:
\]\s*([^\[]*?)\s*\[
您可能需要根据您使用的语言转义反斜杠 更新:对于Java,请转义反斜杠
\\]\\s*([^\\[]*?)\\s*\\[
在第一组中捕获所需的文本。
答案 2 :(得分:1)
如果是Java,那么您可以使用以下代码:
String str = "[DOC TEXT] STARTS WITH [foo] ";
System.out.printf("<%s>%n",
str.replaceAll("^[^\\]]+\\]\\s*([^\\[]+?)\\s*\\[.*$", "$1"));
// output
//<STARTS WITH>