2012-01-23 5 views
-2

Предположим, что у меня есть String str="Hello $everybody$. How $are$ you $all$"; Из выше строки, мне нужно извлечь значения everybody, are, all в список. Обратите внимание, что все необходимые значения начинаются и заканчиваются на $. Как я могу это сделать в java?Мне нужно извлечь некоторые переменные из строки в Java

Пожалуйста, помогите.

С уважением,

ответ

3

Рабочий код: (. *)

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class HelloWorld { 

    public static void main(String[] args) { 
     Pattern p = Pattern.compile("\\$(\\w.*?)\\$"); 
     String s = "Hello $everybody$. How $are$ you $all$"; 

     Matcher m = p.matcher(s); 
     while (m.find()) { 
       System.out.println(m.group(1)); 
     } 
    } 

} 
+1

Это единственный ответ, когда квантор regex неохотно. Все остальные используют жадные кванторы во время написания этого. –

+0

Я пробовал с этим кодом. Он работает нормально. Спасибо всем за ответы. –

+3

@SweetDream проверить http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work then – alf

0

Посмотрите на Matcher класса в Java.

Pattern p = Pattern.compile("$(.*)$", Pattern.DOTALL); 
Matcher matcher = p.matcher(str); 
while (matcher.find()) { 
    // Get the matching string 
    String match = matcher.group(); 
} 
+2

'' 'поймает $', так что '$ один $ $ $ два' будет одна переменная - это то, как ожидалось? Кроме того, вероятно, следует избегать '$'. – alf

+0

Кроме того, квантификатор должен быть неохотно ('*?'), А не жадным. –

1

Попробуйте выполнить этот урок: http://java.sun.com/developer/technicalArticles/releases/1.4regex/ - он должен помочь. \$(\w+)\$ - трюк.

+0

Не забудьте использовать неохотный квантификатор: '+?' –

+1

@EmilLundberg '\ w' is' [a-zA-Z_0-9] 'и, следовательно, не соответствует' $ ', поэтому нет необходимости в '?' – alf

+1

О, конечно. Виноват. –

Смежные вопросы