带有或不带尾部斜杠的PHP RegEx

gre*_*awk 4 php regex preg-match-all

我的目标:

要捕获URL的最后一部分是否存在尾部斜杠,而不使用尾部斜杠作为URL上的字符串的一部分,类似于以下内容:

http://foo.com/p/dPWjiVtX-C/
                 ^^^^^^^^^^
               The string I want
Run Code Online (Sandbox Code Playgroud)

我的问题:

我尝试的每一种方式只允许使用尾部斜杠而不是没有尾部斜杠的url,或者使尾部斜杠包含在我想要的字符串中.

我试过了什么?

1. 我试图斜线添加到末尾:

  $regex = "/.*?foo\.com\/p\/(.*)\//";
  if ($c=preg_match_all ($regex, $url, $matches))
  {
    $id=$matches[1][0];
    print "ID: $id \n";
  }
Run Code Online (Sandbox Code Playgroud)

当我没有尾部斜杠时,这会导致错误.

2. 我已尝试添加一个问号:

  $regex = "/.*?foo\.com\/p\/(.*)[\/]?/";
Run Code Online (Sandbox Code Playgroud)

这会导致斜杠(如果存在)位于我的字符串中.

我的问题/ tl;博士:

如何构建一个不需要斜杠的RegEx,但是将斜杠保留在前面的字符串中?

vro*_*del 9

.*默认情况下你是贪婪的,所以如果它可以"吃掉"捕获组中的斜线,它就会.

为了使它不贪婪,你需要.*?取代.*你的捕获组.那么,你的正则表达式将是:

$regex = "/^.*?instagram\.com\/p\/(.*?)[\/]?$/";
Run Code Online (Sandbox Code Playgroud)