2

我正在尝试使用正则表达式从以下字符串 [DOC TEXT] STARTS WITH [foo] 获取文本“STARTS WITH”。我为此使用了以下代码。

String expertWhereClause = (String) formFields
                    .get(Constants.EXPERT_SEARCH_WHERECLAUSE);
            String delims = "\\[(.*?)\\]";
            String[] tokens = expertWhereClause.split(delims);

但我得到以下字符串“[,STARTS WITH ]”。我只想要“开始”。

我是正则表达式的新手,请在这里帮助我。

提前致谢

4

3 回答 3

3

您可以Matcher为此使用:

Matcher m = Pattern.compile("\\]([^\\[]*)\\[").matcher("[Hello]world[!!!]");
while (m.find()) {
    System.out.println(m.group(1));
}

此代码片段在 ideone 上打印。 world

请注意我如何更改您的正则表达式以[^\\[]*代替.*?. 这提高了效率,这对于更长的输入可能很重要。

于 2012-08-22T18:18:16.050 回答
1

使用这个正则表达式:

\]\s*([^\[]*?)\s*\[

您可能需要根据您使用的语言转义反斜杠。
更新:对于 Java,请转义反斜杠

\\]\\s*([^\\[]*?)\\s*\\[

所需的文本被捕获在第一组中。

于 2012-08-22T18:22:48.857 回答
1

如果是 Java,那么您可以使用以下代码:

String str = "[DOC TEXT] STARTS WITH [foo] ";
System.out.printf("<%s>%n", 
                    str.replaceAll("^[^\\]]+\\]\\s*([^\\[]+?)\\s*\\[.*$", "$1"));
// output
//<STARTS WITH>
于 2012-08-22T18:23:02.140 回答