2012-08-22 52 views
2

我想从下面的字符串[DOC TEXT]开始使用[foo]使用正则表达式的文本“开始”。我为此使用了以下代码。如何获取括号内的字符串] [

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

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

刚接触正则表达式,请帮我看看这里。

在此先感谢

+1

请告诉我们您使用的语言(你试过获得第二匹配组?) –

+1

提供有效和无效的例子 – Anirudha

回答

1

使用这个表达式:

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

您可能需要逃避根据您所使用的语言的反斜杠。
更新:对于Java,逃避反斜杠

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

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

+0

给我下面的errorInvalid转义序列(有效的是\ b \ t \ n \ f \ r \“\'\\) – Pradeep

+0

@Kash,有问题的语言是java –

+0

@Pradeep:现在试试。这将消除空间。 – Kash

3

您可以使用Matcher此:

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

这段代码printsworld上ideone。

请注意我如何更改您的正则表达式,以使用[^\\[]*代替.*?This improves efficiency,这对于较长的输入可能是重要的。

+0

他不需要括号内的内容。他需要相反的。 – Kash

+0

@Kash感谢您的提示,现在已经修复。 – dasblinkenlight

+0

+1,但你能解释为什么'[^ \\ [] *'比'。*?'更有效吗? –

1

如果是Java的,那么你可以使用此代码:

String str = "[DOC TEXT] STARTS WITH [foo] "; 
System.out.printf("<%s>%n", 
        str.replaceAll("^[^\\]]+\\]\\s*([^\\[]+?)\\s*\\[.*$", "$1")); 
// output 
//<STARTS WITH> 
相关问题