Обращаясь к вашему вопросу конкретно:
Вы можете сделать любой отдельный символ (или группу символов) необязательным, добавив ?
после него в своем регулярном выражении.
Несколько советов по просмотру вашего кода:
- Если вы сопоставляете строки, содержащие
/
символов, упростите свою жизнь, используя другой разделитель (например, #
). Вы не обязаны использовать косую черту.
- Вам следует избегать метасимвола
.
dot, поскольку он соответствует ЛЮБОМУ одиночному символу, поэтому ваше выражение www.
может совпадать с www9 или чем-либо еще в этих строках
- Кроме того, скобки
[...]
предназначены для соответствия диапазону символов. Если вы хотите точно сопоставить текст www. , вам следует использовать незаписанную группу, например (?: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
?>