编写测试数据的正则表达式(PCRE)

时间:2015-05-28 08:31:00

标签: regex pcre

我正在尝试编写一个符合以下条件的正则表达式:

在第一个' @'之后匹配所有内容和':'紧随其后。但它不应该包括这两个字符。我已粘贴测试数据。我更喜欢使用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

5 个答案:

答案 0 :(得分:4)

我会使用lookbehind assertion

(?<=@)[^:]+

它匹配前面有@的非':'字符序列。 @未包含在匹配中。

https://regex101.com/r/pZ6xA5/1

答案 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[^:]+

demo

答案 3 :(得分:1)

您可以尝试([a-z])*?\.([a-z])*

Demo

答案 4 :(得分:1)

(?<=@)([^:\d]+):

更多detail

enter image description here