不要使用斜杠作为捕获定界符

时间:2019-10-31 02:52:22

标签: php regex codeigniter

我正在使用CodeIgniter 4 RC3。

我有一个URL结构,该结构需要年-月-日加上文章的内容来标识它,例如:

/2019/10/20/hello-world

所以我尝试为路线编写的正则表达式为:

$routes->get('/(\d{4}\/\d{2}\/\d{2}\/([a-z\-]+))', 'Pages::article/$1/$2');

我想要的是在一个参数中获得整个永久链接(year/month/day/slug),然后在另一个参数中获得该子弹。但这似乎不起作用(至少默认情况下)。

发生的事情是,大括号(捕获从第二个字符到结尾的所有内容)始终将其内部的斜杠用作分隔符。因此,斜杠本身不会成为捕获结果的一部分,而是将捕获结果分成3个块。

所以不是我想要的,而是

  • $1包含/2019/10/20/hello-world
  • $2包含hello-world

我得到:

  • $1包含2019
  • $2包含10
  • $3包含2019
  • $4包含hello-world
  • 然后$5是我自己的第二个括号对,它再次包含hello-world

我不知道这是CodeIgniter的行为,还是PHP中的其他行为,但是如何获取它以单个变量提供整个永久链接?

0 个答案:

没有答案