2011-12-19 12 views
1

は私が交換するためにしようとしている: *facebook.com/ preg_replaceでグループをオプションにするにはどうすればよいですか?

http://graph.facebook.com/と私は、オプションのグループにfacebook.com部分前のグループのものにできるようにする必要があります。
着信URLにhttpsが含まれている可能性があるため、facebook.comgraph.facebook.comに置き換えることはできません。

これは私が持っているものですが、http[s]://がないものは見逃しています。

<?php 
$fb_url = preg_replace('/http[s]*:\/\/[www.]*facebook.com\//', 'http://graph.facebook.com/', 'facebook.com/some/segments'); 
echo $fb_url; 
?> 

答えて

6

以下のようなもの: あなたの正規表現で、それの後に?を追加することにより、任意の単一の文字(または文字のグループ)オプションを作ることができます。

あなたのコードを見てからのヒントのカップル:

  • あなたが/文字を含む文字列に一致している場合は、(例えば、#用)異なる区切り文字を使用することによってあなたの人生を簡素化します。スラッシュを使用する必要はありません。
  • それは任意の一文字にマッチするので、あなたの表現www.が考えられるそれらの線
  • 沿っwww9または何かを一致させることができるようにあなたは、.ドットメタ文字をエスケープする必要があります。また、ブラケット[...]は文字の範囲を合わせるためのものです。具体的にテキストwwwと一致させたい場合。あなたは... (?:www\.)?

だから、心の中でこれらのヒントは、試すようにそれの後?を追加することにより、

<?php 

$p = '#(?:https?://(?:www\.)?)?facebook\.com/#'; 
$r = 'http://graph.facebook.com/'; 
$subject = 'facebook.com/some/segments'; 

$fb_url = preg_replace($p, $r, $subject); 
echo $fb_url; // outputs: http://graph.facebook.com/some/segments 

?> 
+0

これを(?:www\.)のような非捕捉グループを使用して、それをオプションにする必要がありヒントをいただきありがとうございます!間違いなく '# 'をデリミタとして使用できるかどうかは分かりませんでした。 –

4

使用、具体的にあなたの質問に対処

(optional-regex-here)? 
関連する問題