我正在尝试编写一个符合以下条件的正则表达式:
在第一个' @'之后匹配所有内容和':'紧随其后。但它不应该包括这两个字符。我已粘贴测试数据。我更喜欢使用http://regexpal.com/来测试我的正则表达式。 例如,如果测试字符串是 " POP3://abby@abby.com:43598743abby@173.201.192.199:110"
然后正则表达式应匹配" abby.com"
pop3://abby@abby.com:43598743abby@173.201.192.199:110
pop3://abby@abby.com:abby243234@173.201.192.199:110
smtp://tania@abby.ca:abby3@69.49.109.86:25
pop3://tania@abby.ca:abbya13@69.49.109.86:110
pop3://abby@abby.com:abby9675@173.201.193.199:110
pop3://abby@abby.com:abby12345@173.201.193.199:110
smtp://abby:820211ly520@202.108.6.242:25
pop3://smartinez@abby.com:abby123@64.26.60.221:110
答案 0 :(得分:4)
答案 1 :(得分:3)
我只是使用:
/@([^:]+):/
它匹配@
和:
之间的字符串,结果在第1组中。
答案 2 :(得分:2)
如果我理解,您希望在用户名 电子邮件地址时提取电子邮件地址的域名。更清楚的是,第一行可以分解为这些部分:
pop3://abby@supremefill.com:ash9675@173.201.192.199:110
[scheme] => pop3
[host] => 173.201.192.199
[port] => 110
[user] => abby@supremefill.com
[pass] => ash9675
因此,用户名为abby@supremefill.com
,此电子邮件地址的域名为supremefill.com
。
请注意,对于行smtp://liangyuan820211:820211ly520@202.108.6.242:25
,用户名不是电子邮件地址:liangyuan820211
,此行不得返回任何结果。
提取域的有效方法包括将模式锚定在行的开头(以便快速丢弃可能尝试模式的无用位置),默认情况下,记事本++中的正则表达式引擎设置为多行模式 (在此模式下^
代表start of the line
)。要丢弃该行的所有开头直到域名,您可以使用\K
。
^[^@:]+:[^@:]+@\K[^:]+
答案 3 :(得分:1)
您可以尝试([a-z])*?\.([a-z])*
答案 4 :(得分:1)