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)?

具体回答您的问题: 通过在正则表达式中的任何单个字符(或一组字符)后面添加一个
,可以使其成为可选字符

查看代码时的几个提示:

  • 如果要匹配包含
    /
    字符的字符串,请使用不同的分隔符(例如
    #
    )简化您的操作。您不需要使用正斜杠
  • 您应该转义
    点元字符,因为它匹配任何单个字符,因此您的表达式
    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

?>

专门解决您的问题: 通过在正则表达式中的任何单个字符(或一组字符)后面添加一个
,可以使其成为可选字符

查看代码时的几个提示:

  • 如果要匹配包含
    /
    字符的字符串,请使用不同的分隔符(例如
    #
    )简化您的操作。您不需要使用正斜杠
  • 您应该转义
    点元字符,因为它匹配任何单个字符,因此您的表达式
    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

?>


这非常有效,谢谢你的提示!肯定不知道
可以用作分隔符。这非常有效,感谢您的提示!肯定不知道
可以用作分隔符。