我正在尝试替换:
*facebook.com/
与http://graph.facebook.com/
我需要能够将facebook.com
部分之前的任何内容分组到可选组中。
我不能将facebook.com
替换为graph.facebook.com
,因为传入的网址可能包含https
。
这就是我所拥有的,但错过了任何没有http[s]://
的内容。
<?php
$fb_url = preg_replace('/http[s]*:\/\/[www.]*facebook.com\//', 'http://graph.facebook.com/', 'facebook.com/some/segments');
echo $fb_url;
?>
答案 0 :(得分:6)
具体解决您的问题:
您可以通过在正则表达式中添加?
后选择任意单个字符(或一组字符)。
查看代码时的一些提示:
/
个字符的字符串,请使用其他分隔符(例如#
)来简化您的生活。您不需要使用正斜杠。.
点元字符,因为它匹配任何单个字符,因此你的表达式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
?>
答案 1 :(得分:5)
使用类似下面的内容
(optional-regex-here)?