如何在preg_replace中创建一个组可选?

Dan*_*cia 1 php regex string url preg-replace

我正试图取代: *facebook.com/http://graph.facebook.com/

我需要能够将facebook.com部件之前的任何内容分组到可选组中.
我不能代替facebook.comgraph.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;
?>
Run Code Online (Sandbox Code Playgroud)

rdl*_*rey 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

?>
Run Code Online (Sandbox Code Playgroud)


ALH*_*ALH 5

使用类似下面的内容

(optional-regex-here)?
Run Code Online (Sandbox Code Playgroud)