5

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

ここで何が欠けていますか?また、電子メール用のより良い正規表現はありますか?

前もって感謝します。

4

2 に答える 2

11

実際には、.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 の解析にはあまり適していません。ここで詳細を見つけることができます: Using regular Expression to parse HTML: why not?

本当の解決策を提供するために、私は最初にお勧めします

  1. HTML→XHTMLに変換
  2. XML ツリーの上を歩く
  3. 正規表現を使用しても、個々のノードを 1 つずつ操作します。
于 2012-07-19T16:11:42.243 に答える
2

電子メールの検証に関しては、私は通常、RFC2822の短いバージョンを選択します。

[a-z0-9!#$%&'* + / =?^ _ {|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|}〜-] +)* @(?: a-z0-9 ?.)+ a-z0-9?

メール検証の詳細については、こちらをご覧ください

于 2012-07-19T16:12:34.160 に答える