php regex似乎没有按预期工作

时间:2018-06-06 15:41:21

标签: php regex

字符串:

https://fakedomain.com/2017/07/01/the-string-i-want-to-get/

代码:

$url = 'https://fakedomain.com/2017/07/01/the-string-i-want-to-get/';
$out = [];

preg_match('\/\d{4}\/\d{2}\/\d{2}(.*)', $url, $out);

// At this point $out is empty... 

// Also...  I tried this (separately)

$keywords = preg_split("\/\d{4}\/\d{2}\/\d{2}(.*)", $url);
// also $keywords is empty... 

我已经在外部对正则表达式进行了测试,但它确实有效。我想拆分/the-string-i-want-to-get/字符串。我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

我不会使用正则表达式。在这种情况下,最好使用parse_url和其他一些帮助,例如trimexplode

<?php    
$url = 'https://fakedomain.com/2017/07/01/the-string-i-want-to-get/';

$parsed = parse_url($url);
$Xploded = explode('/',trim($parsed['path'],'/'));
print $Xploded[count($Xploded)-1];

// outputs: the-string-i-want-to-get

答案 1 :(得分:1)

有一个功能:

echo basename($url);

答案 2 :(得分:0)

  

preg_split
  通过正则表达式拆分字符串。用正则表达式拆分给定的字符串。

您的$url将按日期分割。这不是你需要做的事情:

<?php
  $url = 'https://fakedomain.com/2017/07/01/the-string-i-want-to-get/';
  $out = [];
  preg_match('/\/\d{4}\/\d{2}\/\d{2}(.*)/', $url, $out); 
  // See here...
  var_dump($out);

您将获得两个元素的数组:

array(2) {
  [0]=>
  string(37) "/2017/07/01/the-string-i-want-to-get/"
  [1]=>
  string(26) "/the-string-i-want-to-get/"
}