2011-10-15 7 views
0

これはPHPファイルのいくつかのコードです。私は 'domain.com'に一致する必要がありますが、hrefタグを探している文書を解析しているので、入力しても機能しません。http://wwwが必要だと思います。マッチのために。私は以下の試合前に試してみましたが、うまくいかず、コーディングがうまくいかなかったので、助けていただければ幸いです。PHPマッチ* .domain.com

preg_match( "/domain.com/i");

 $match = 'http://www.domain.com'; 

     for($i=0;$i<$documentLinks->length;$i++) 
     { 
      $documentLink = $documentLinks->item($i); 
      if ($documentLink->hasAttribute('href') AND substr(strtolower($documentLink->getAttribute('href')), 0, strlen($match)) == $match) 
      { 
+0

それは私だけですか、ドメイン名の代わりにドメイン名を使用するのが問題ですか? – ytg

+0

ミストタイプはこちら(編集済み)ですが、問題ではありません。 – Anagio

答えて

3

これを試してみてください。

for($i=0;$i<$documentLinks->length;$i++) 
{ 
    $documentLink = $documentLinks->item($i); 
    if ($documentLink->hasAttribute('href')) 
    { 
     if (preg_match('!^https?://([^/]+\.)?domain\.com(/|#|$|\?)!i', trim($documentLink->getAttribute('href')))) 
     { 

regexpは重要な部分である:文字列の先頭に

^https?://([^/]+\.)?domain\.com(/|#|$|\?) 

開始、それが、その後、オプションのサブドメインをHTTPまたはHTTPSと一致フォワードスラッシュは含まれていません(あなたはあなたがまだドメイン部分にいることを知っています)。次に一致させたいドメインがあり、パスの開始、フラグメントの開始、またはURLの末尾のいずれか

+1

+1、私はそれが好きで、感知できる良い正規表現です。 1つのマイナーな追加 - 私は 'trim()'の前に値を一致させるでしょう。開始マーカーと終了マーカーを使用しているため(ここに記載する必要があります)、先頭または末尾の空白は一致しません。多くのブラウザがこれを許しますので、おそらくあなたもそうでしょう。また、あなたの正規表現は、クエリ文字列のアカウントですか? – DaveRandom

+0

良い点 - クエリ文字列はドメイン部分の直後に来る可能性があります。両方を固定しています... – Cal

+0

ありがとう、それはdomain.com、www.domain.comと一致していますが、test.domain.comとは一致しません。 – Anagio

関連する問題