2011-08-12 7 views
0

ネームサーバーを抽出しようとしています。 $outputの形式は、たとえばns1.nameserver.comを含むような形式です。PHP正規表現で始まっていない..負のlookbehindが動作していませんか?

www.apple.comを含む場合もあります。
これはもちろんネームサーバではありません。私は含まれていので、どんな結果が含まれていませしようとしています

www.
私の試みは、以下の通りです:

あなたは先読みが必要
$regexp = "/(?<!www)([A-Za-z0-9-]+[\.][A-Za-z0-9-]+[\.][A-Za-z0-9-\.]+)/i"; 
preg_match_all($regexp, $output, $nameservers); 
+1

「これは当然のネームサーバではありません。」あなたはそれを確信することはできません - 誰もがwww.whatever.comを彼らのネームサーバ名として使用するのを止めるものは何もありません。 –

+0

シェルexecのテキスト出力をwhoisに解析しようとしているようです。開始ドメイン名をすでに知っていれば、明示的なNSクエリを行うほうが良いでしょう。 PEARのNet_DNSモジュールやシェルのexecを使ってこれを行うことができます。 (例: "dig + short google.com ns") –

答えて

3

、後読みません。しかし

/(?!www)([A-Za-z0-9-]+[\.][A-Za-z0-9-]+[\.][A-Za-z0-9-\.]+)/i 

が、これはおそらくありませんこれは文字列 www.abc.def.comabc.def.comに一致するため、十分です。あなたはまた、いくつかのアンカーと後読みを必要とするだろう(そして、あなたはいくつかの括弧、バックスラッシュも i修飾子は必要ありません):

/(?<!\.)(?!www)\b([A-Za-z0-9-]+\.[A-Za-z0-9-]+\.[A-Za-z0-9.-]+)/ 
+0

あなたの例は完璧に動作しています...なぜ今の私の頭を抱いていますか? 私はそれに訂正していますか?手続きがないことを確認します。 ' (?!www)は、wwwがないことを確認します。 \ b単語境界については、ここでその使用法を詳しく説明できますか? –

+0

あなたは正しいです。 '\ b'に関しては、単語の先頭で一致を開始することを保証するためにそこにあります。それがなければ、例えば 'www2.amazon.com'の' ww2.amazon.com'とマッチします。 –

+0

出力が「Nameserver:www.amazon.com」の場合、それは意味しますか。ありがとう –

関連する問題