Php 如何在preg_replace中使组成为可选组?
我正在尝试替换:Php 如何在preg_replace中使组成为可选组?,php,regex,string,url,preg-replace,Php,Regex,String,Url,Preg Replace,我正在尝试替换: *facebook.com/ 使用http://graph.facebook.com/ 我需要能够将facebook.com部分之前的任何内容分组到可选组中。 我不能用graph.facebook.com替换facebook.com,因为传入的URL可能包含https 这里是我所拥有的,但是错过了任何没有http[s]://的东西 <?php $fb_url = preg_replace('/http[s]*:\/\/[www.]*facebook.com\//', 'h
*facebook.com/
使用http://graph.facebook.com/
我需要能够将facebook.com
部分之前的任何内容分组到可选组中。
我不能用
graph.facebook.com
替换facebook.com
,因为传入的URL可能包含https
这里是我所拥有的,但是错过了任何没有http[s]://的东西
<?php
$fb_url = preg_replace('/http[s]*:\/\/[www.]*facebook.com\//', 'http://graph.facebook.com/', 'facebook.com/some/segments');
echo $fb_url;
?>
使用下面的方法
(optional-regex-here)?
使用下面的方法
(optional-regex-here)?
具体回答您的问题: 通过在正则表达式中的任何单个字符(或一组字符)后面添加一个
?
,可以使其成为可选字符
查看代码时的几个提示:
- 如果要匹配包含
字符的字符串,请使用不同的分隔符(例如/
)简化您的操作。您不需要使用正斜杠#
- 您应该转义
点元字符,因为它匹配任何单个字符,因此您的表达式
可以想象与www9或其他任何类似的字符匹配www.
- 此外,括号
用于匹配一系列字符。如果您想特别匹配文本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
?>
专门解决您的问题: 通过在正则表达式中的任何单个字符(或一组字符)后面添加一个
?
,可以使其成为可选字符
查看代码时的几个提示:
- 如果要匹配包含
字符的字符串,请使用不同的分隔符(例如/
)简化您的操作。您不需要使用正斜杠#
- 您应该转义
点元字符,因为它匹配任何单个字符,因此您的表达式
可以想象与www9或其他任何类似的字符匹配www.
- 此外,括号
用于匹配一系列字符。如果您想特别匹配文本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
?>
这非常有效,谢谢你的提示!肯定不知道。
可以用作分隔符。这非常有效,感谢您的提示!肯定不知道。
可以用作分隔符。