Используя regex для извлечения имени пользователя из адреса электронной почты

string path = @"c:\folders\newfolder"; // or whatever 
if (!System.IO.Directory.Exists(path)) 
{ 
    DirectoryInfo di = Directory.CreateDirectory(path); 
    di.Attributes = FileAttributes.Directory | FileAttributes.Hidden; 
}

От здесь .

28
задан Peter Mortensen 6 August 2017 в 12:05
поделиться

4 ответа

Регулярное выражение, которое будет соответствовать и захватывать любой символ, пока он не достигнет символа @ :

([^@]+)

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


Я не уверен, почему Бен Джеймс удалил свой ответ, поскольку я считаю, что он лучше моего. Я собираюсь опубликовать его здесь (если он не восстановит свой ответ):

Зачем использовать регулярное выражение вместо строковых функций?

 $ parts = explode ("@", " johndoe@domain.com ");
$ username = $ parts [0];

В этой ситуации вам вообще не нужны регулярные выражения. Лично я думаю, что использование explode намного лучше.


Как Johannes Rössel указывает в комментариях, синтаксический анализ адресов электронной почты довольно сложен. Если вы хотите быть на 100% уверены, что сможете обрабатывать любой технически допустимый адрес электронной почты, вам придется написать процедуру, которая будет правильно обрабатывать цитирование, потому что оба решения, перечисленные в моем ответе, будут подавляться адреса типа " a @ b " @ example.com . Может быть, есть библиотека, которая обрабатывает этот вид синтаксического анализа за вас, но я не знаю об этом.

82
ответ дан 28 November 2019 в 02:18
поделиться

@OP, если вы хотите получить все до @, просто используйте методы строки / массива. Нет необходимости в сложном регулярном выражении. Разнесите на «@», затем удалите последний элемент, который является частью домена

$str = '"peter@john@doe"@domain.com (John Doe)';
$s = explode("@",$str);
array_pop($s); #remove last element.
$s = implode("@",$s);
print $s;

, вывод

$ php test.php
"peter@john@doe"
6
ответ дан 28 November 2019 в 02:18
поделиться

Я бы выбрал $ author = str_replace (strrchr ($ authorpre, '@'), '', $ authorpre);

2
ответ дан 28 November 2019 в 02:18
поделиться

Вы можете начать с использования mailparse_rfc822_parse_addresses для синтаксического анализа адреса и извлечения только спецификации адреса без какого-либо отображаемого имени. Затем вы можете извлечь часть перед @ с помощью регулярного выражения (. *) @ .

2
ответ дан 28 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: