Java регулярное выражение для удаления всех символов, кроме шаблона

1

У меня есть строка, включая электронную почту. Вероятно, есть дополнительные символы до и/или после него. примеры ввода:

[email protected]
[email protected] abcd efg
x y z [email protected]
p q [email protected] x z
asd[[email protected]]gh

Я хочу удалить лишние символы.

Требуемые выходы:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Допустимыми символами являются a-zA-Z0-9._ Таким образом, вероятно, недопустимые символы до и/или после электронной почты.

Я пробовал этот код, чтобы определить, является ли он правильным письмом или нет (предполагается, что он отделен от лишних символов пробелом), но я не могу заменить нужную строку (используя s.replaceAll()):

if (s.matches("(?i).*\\s[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+.*") ||
    fields[2].matches("(?i).*[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+\\s.*"))
  • 3
    Прочитайте это
  • 2
    Не используйте matches и не replaceAll . Вместо этого установите Matcher , используйте find (который найдет шаблон в любом месте строки) и используйте group(0) чтобы вернуть найденную строку. Намного легче будет сказать, чтобы она возвращала совпавшую строку, чем сказать, чтобы она удаляла несопоставленные символы.
Показать ещё 5 комментариев
Теги:
string
email

3 ответа

1
Лучший ответ

вы можете использовать java.util.regex.Pattern и java.util.regex.Matcher

Этот код будет делать то, что вы просите:

public static void main(String[] args) {
    String[] testList = {"[email protected]", 
            "[email protected] abcd efg", 
            "x y z [email protected]", 
            "p q [email protected] x z", 
            "asd[[email protected]]gh"};

    Pattern EMAIL_PATTERN = Pattern.compile("[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})");


    for(String test : testList){
        Matcher m = EMAIL_PATTERN.matcher(test);
        while (m.find()) {
             System.out.println(m.group(0));
        }
    }
}
0

Проверка адресов электронной почты невозможна. Это возможно только для проверки адреса электронной почты-адресата - и даже эта задача довольно сложная, из-за новых tld с более чем 3-мя символами.

Таким образом, вам лучше найти "недействительные" адреса электронной почты (отправка почты не удалась), а затем отсутствие действительного.

использование

([a-zA-Z0-9!#$%&'*+-/=?^_'{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))

чтобы захватить все, что может быть адресом электронной почты.

  ([a-zA-Z0-9!#$%&'*+-/=?^_'{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))

Изображение 174551

Демоверсия Debuggex

0

Учитывая ваше определение действительных символов, попробуйте:

^.*?([\w.]+@[\w.]+).*$

и заменить на группу захвата 1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню