0

我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一种用于获取电子邮件地址(它们始终以 .com 或 .net 或 .org 结尾),另一种用于获取用户名。

我只希望用户名作为一个表达式,域部分作为另一个,我不想要@符号。

@stackoverflow.com
@google.com
@example.com

我试过了

^@.*?..*?$

用户

@Perl
@Python
@PHP

我试过了

^@.*?$

任何建议都是好的。

4

3 回答 3

0

尝试这个

用户 (?<=@)\w+

电子邮件 (?<=@)\w+.(?:com|net|org)

编辑:嗯,您没有规定您正在运行什么正则表达式引擎,这是基于 pcre 的,但是任何具有后视功能的引擎最有可能具有相同的语法

于 2013-10-12T04:40:49.483 回答
0

你可以对域做这样的事情:

^@[^.]+\.[^.]+$

这将匹配字符串的开头,后跟一个@,后跟一个或多个除 之外 .的任何字符,后跟一个.,后跟一个或多个除 之外 .的任何字符,然后是字符串的结尾。

但这不会捕获具有两个以上部分的域(例如@meta.stackoverflow.com)。如果这很重要,你可以试试这个:

^@[^.]+(\.[^.]+)+$

这将匹配字符串的开头,后跟一个@,后跟一个或多个除 之外 .的任何字符,后跟一个由 a 组成的组.,后跟一个或多个除 之外 .的任何字符,其中该组可以重复重复一次或多次,然后是字符串的结尾。

这对用户来说:

^@[^.]+$

这将匹配字符串的开头,后跟一个,然后是一个或多个除 之外@的任何字符,然后是字符串的结尾。 .

于 2013-10-12T04:10:31.533 回答
0

\.在您的第一个表达式中,如果您在最后一个表达式之前转义点,它将匹配.*?您的第二个表达式只是清楚地匹配整行。匹配但排除@你可以做的..

对于域使用:

^@(\S+\.[^\s]+)$

正则表达式:

^             the beginning of the string
@             '@'
 (            group and capture to \1:
\S+           non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)      
\.            '.'
[^\s]+        any character except: whitespace (1 or more times)
)             end of \1
$             before an optional \n, and the end of the string

观看现场演示

供用户使用:

^@([^\s.]+)$

正则表达式:

^             the beginning of the string
@             '@'
 (            group and capture to \1:
[^\s.]+       any character except: whitespace or '.' (1 or more times)
)             end of \1
$             before an optional \n, and the end of the string

观看现场演示

于 2013-10-12T04:12:35.870 回答