Управляющий Regex в Java - PullRequest
       0

Управляющий Regex в Java

0 голосов
/ 06 апреля 2011

Как мы можем управлять регулярными выражениями в Java?

Да, я выполнил поиск по регулярным выражениям, но я думаю, что это странно в Java.

Я бы хотел

My team <xxx-yyyy@uuuu.com> 

с регулярным выражением, я хотел быполучить строку между <> как xxx-yyyy@uuuu.com

Pattern p = Pattern.compile("(.+?)\\<.*?\\>?");

выше одного не работал.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

На самом деле вам нужно вызвать метод find () для объекта Matcher, чтобы пройтись по вашей строке. И, как сказал Петри Пеллинен, вы должны проверить правильность группировки.

Попробуйте следующий код:

String str = "My team <xxx-yyyy@uuuu.com>  My team <xxx-yyyy@uuuu.com> \n " +
    "My team <xxx-yyyy@uucom> My team <xxx-yyyy@uuuu.com> " +
    "My team <xxx-yyyy@uuuu.com> My team <xxx-yyyy@uuuu.com>";

Pattern p = Pattern.compile("\\<(.*?)\\>");
Matcher m = p.matcher(str);

while(m.find()){
   System.out.println(m.group(1));  
}

и проверьте выбранные группы.

Результаты:

xxx-yyyy@uuuu.com
xxx-yyyy@uuuu.com
xxx-yyyy@uucom
xxx-yyyy@uuuu.com
xxx-yyyy@uuuu.com
xxx-yyyy@uuuu.com

ура!

3 голосов
/ 06 апреля 2011

Поскольку кажется, что вы имеете дело с адресами электронной почты стандартного формата ( RFC 822 ), вы можете рассмотреть возможность использования JavaMail API .Он предназначен для работы со всем в спецификации, тогда как с помощью регулярных выражений вы можете пропустить некоторые случаи.Код для того, что вы хотите, тоже прост:

String input = "My team <xxx-yyyy@uuuu.com>";
String email = new InternetAddress(input).getAddress();
3 голосов
/ 06 апреля 2011

Как то так, может быть?

    Pattern p = Pattern.compile("(.+?)<(.*?)>");
    Matcher matcher = p.matcher("Foo bar <xxx-yyy@aaa.bbb>");
    if ( matcher.matches() ) {
         System.out.println(matcher.group( 2 ));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...