RegEx(PowerShell)的可选字符串开头

时间:2019-05-12 21:19:25

标签: regex powershell

如何选择允许SMTP地址以“ smtp:”或“ SMTP”开头,并让以下RegEx匹配?

(?<!-_.)(?!.*\.\.)(?=[a-zA-Z0-9][a-zA-Z0-9@\-_.]{4,}$)[a-zA-Z0-9-_.]{1,64}[a-zA-Z0-9]\@(?:(?=[a-zA-Z0-9-]{1,254}\.)[a-zA-Z0-9]+(?:\-[a-zA-Z0-9]+)*\.){1,}[a-zA-Z]{2,63}$

我尝试了(smtp:|SMTP:)的不同变体,但似乎没有一个起作用。

2 个答案:

答案 0 :(得分:0)

由于您未在示例输入中显示。使用伪造的邮件数据样本,如何做……

$MailData = '
From:smtp:JoeBob@yahoo.com,Tom TheCat tcat@snailmail.net,jerry@snailmail.net 
To:TulaJane@hotmail.com;JF@gmail.com;SMTP:tiger@outlook.com; 
Doug Tompson smtp:DTompson@icloud.com 
MailTo:BobsYourUncle@protonmail.com; 
SMTP:johnny.bravo@yahoo.co.uk
'
[regex]::Matches($MailData,'(smtp[:]|SMTP[:])\w+@\w+\.\w+|(smtp[:]|SMTP[:])\w+\.\w+@\w+\.\w+\.\w+').Value

# Or
[regex]::Matches($MailData,'(smtp.|SMTP.)\w+@\w+\.\w+|(smtp.|SMTP.)\w+\.\w+@\w+\.\w+\.\w+').Value

# Results

smtp:JoeBob@yahoo.com
SMTP:tiger@outlook.com
smtp:DTompson@icloud.com
SMTP:johnny.bravo@yahoo.co.uk

答案 1 :(得分:0)

感谢@LotPings

(((smtp:| SMTP:)(//)?)?(?。)(?!。* ..)(?= [a-zA-Z0-9] [a-zA-Z0-9 @-。] {4,} $)[a-zA-Z0-9 -_。] {1,64} [a-zA-Z0-9-)@(?:(?= [a-zA-Z0- 9-] {1,254}。)[a-zA-Z0-9] +(?:-[a-zA-Z0-9] +)*。){1,} [a-zA-Z] {2, 63} $