
[英]how to grab a substring between a character and a string in powershell using regex
[英]Using Regex in Powershell to grab email
我编写了一个脚本来抓取HTML文件中的不同字段,并使用结果填充变量。 我正在使用正则表达式来抓取电子邮件。 以下是一些示例代码:
$txt='<p class=FillText><a name="InternetMail_P3"></a>First.Last@company-name.com</p>'
$re='.*?'+'([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})'
if ($txt -match $re)
{
$email1=$matches[1]
write-host "$email1"
}
我收到以下错误:
Bad argument to operator '-match': parsing ".*?([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\
.)+[a-zA-Z]{2,7})([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})" - [x-y] range in reverse order..
At line:7 char:16
+ if ($txt -match <<<< $re)
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : BadOperatorArgument
我在这里错过了什么? 此外,是否有更好的电子邮件正则表达式?
提前致谢。
实际上,任何适用于.Net或C#的正则表达式都适用于PowerShell 。 你可以在stackoverflow和inet找到吨和吨样本。 例如: 如何查找或验证电子邮件地址:官方标准:RFC 2822
$txt='<p class=FillText><a name="InternetMail_P3"></a>First.Last@company-name.com</p>'
$re="[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"
[regex]::MAtch($txt, $re, "IgnoreCase ")
但是这个答案还有其他部分。 正则表达式本质上不太适合解析XML / HTML 。 您可以在此处找到更多详细信息: 使用正则表达式解析HTML:为什么不呢?
为了提供真正的解决方案,我先推荐
在电子邮件验证方面,我通常会选择RFC 2822的简短版本:
[a-z0-9!#$%&'* + / =?^ _
{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_
{|}〜 - ] +)* @(?:A-Z0-9)+ A-Z0-9?。?
您可以在此处找到有关电子邮件验证的更多信
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.