2011-08-16 7 views
0

問題を取得するために、正規表現のために必要。補正は、サイト名に

ソリューション:$ URL1が一致した場合

<?php 
$url1='http://www.examplehotel.com'; 
//$url2='http://test-hotel-1.com'; 
$pattern='@^http://([^/]+)[email protected]'; 
preg_match($pattern, $url1, $matches); 
print_r($matches); 
?> 

それは文字列 'examplehotel' を返す必要があります
$ URL2が一致したときに、それは文字列 'テスト-ホテル-1' を返すべき

それは正常に動作します$ url2の場合は空ですが、$ url1の場合は空です。

私のパターンでは、[http://]または[http://www.]を追加しました。(http://)+(www.)+を追加しましたが、一致するリターンは期待できませんd :(。

どこが間違っているのか分かりますか?

答えて

1

、このいずれかを試してみてください。

$pattern='@^http://(?:www\.)?([^\.]+)[email protected]'; 

たりパターンであなただけ(またはしないかもしれパターンで表示される場合があります)wwwをオプションにする必要があります。

$pattern='@^http://(?:www\.)?([^/]+)[email protected]'; 
1

問題は、あなたがしていること、です2つのスラッシュのすべてを.comに一致させます。 www.がある場合、キャプチャグループ内でこれも一致しています。

溶液これは、すなわち、コンテンツの非捕捉基は、結果に格納されていない。この

^http://(?:www\.)?([^/]+)\.com 
     ^^^^^^^^^^  ^^ 

(?:www\.)?ように、必要に応じて自分のキャプチャグループ前www.と一致することです。最後の?はオプションです。

\.は、リテラル "。"と一致します。 .は正規表現の特殊文字で、 "任意の文字"を意味します。

ここをクリックしてくださいonline on Regexr、マウスの上にマウスを置くと、キャプチャグループの内容が表示されます。

[http://]などで試してください。角括弧を使用すると、大カッコ内の文字の1つと一致する文字クラスが作成されます。文字をグループ化する場合は、キャプチャ()またはキャプチャなしの(?:)グループを使用します。

+0

+1これは明らかに私が間違っていた場所を理解するのに役立ちました。ありがとうStema – user269867

0
preg_match_all('%http(?:s)?://(?:www\.)?(.*?)\.com%i', $url, $result, PREG_PATTERN_ORDER); 
print_r($result[1]) 
関連する問題