0

抽出したhtmlコードがあります。

Server Address</span></td><td    ><span  class="hpPageText" >hostname0403.domain.tld</span></td><

この文字列から、fqdn(hostname0403.domain.tld)を抽出しようとしています。次のロジックを使用すると思いました。

  1. >で始まり、<で終わる
  2. 少なくとも1つのピリオド(ドット)を含める必要があります。
  3. すべての数字、すべての文字、または両方の組み合わせのいずれかを含める必要があります。

最終的には">hostname0403.domain.tld<"になり、そこから><を取り除くことができます。これは私がこれまでに持っているregであり、機能しますが、正確ではないと思います。

$reg = ">[\w\.]+<"

私は正規表現に非常に慣れていません。これは機能しますが、フェイルセーフかどうかはわかりません。どんな助けでもいただければ幸いです。

4

2 に答える 2

1

正規表現パターンにはいくつかの作業が必要です。たとえば、ホスト名の前後に空白が存在する可能性があります。また、ホスト名には「-」文字を含めることができます。次のように空白を処理できます。

'>\s*(..hostname regex)\s*<'

より良いホスト名正規表現については、このSOの回答を参照してください。ニーズに合わせて正規表現を変更する方法は次のとおりです。

$str = 'Server Address</span></td><td    ><span  class="hpPageText" >hostname0403.domain.tld</span></td><'
$ValidHostnameRegex = ">\s*((?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))\s*<"
$str -match $ValidHostnameRegex
$matches[1]

出力:

hostname-0403.domain.tld
于 2013-01-17T16:13:58.107 に答える
1

以下を使用できます(ボーナスとして、正規表現は>と<を除外します):

        string source = @"Server Address</span></td><td    ><span  class=""hpPageText"" >hostname0403.domain.tld</span></td><";
        Regex r = new Regex(@"(?<=\>)(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])(?=\<)");

        string fqdn = "";
        Match fqdnMatch = r.Match(source);
        if (fqdnMatch.Success)
        {
            fqdn = fqdnMatch.Value;
        }
于 2013-01-17T16:25:26.650 に答える