2017-08-09 27 views
1

我需要帮助解决正则表达式(PCRE)。我想从下面的多个网址中提取hello-world部分。我得到这个至今:我如何正则表达式网址的一部分

^/news/(.*?)/$ 

https://www.example.com/news/2017-08-09/hello-world/topics/ 

https://www.example.com/news/2017-08-09/hello-world/gallery/ 

https://www.example.com/news/2017-08-09/hello-world/ 

但这捕捉2017-08-09/hello-world/topics,我只需要hello-world

+0

这是什么规则?请制定要求。 –

+0

如果我明白了,并且想知道哪些网址包含hello-world,为什么不用'hello-world'作为模式呢? – Igle

+0

是否存在阻止您仅仅执行'/ hello-world /'的要求? – Bic

回答

2

您可以在PCRE使用这个表达式:

~/news/[^/]*/\K[^/]+~ 
  • /news/[^/]*/:比赛之后/news/零个或多个非/其次/
  • \K:放弃匹配信息
  • [^/]+:比赛一个或多个非/个字符

RegEx Demo


也可以使用捕获组:

/news/[^/]*/([^/]+) 

和提取物捕获组#2

RegEx Demo 2

+0

我在哪里设置$组? – Maca

+0

'$'组是什么意思?只需使用'preg_match_all'来获得匹配 – anubhava

+0

我想在nginx.conf中做这个 – Maca

0

IF你好世界代表一个未知文本,其余是固定的,试试这个:

^/news/2017-08-09/(.*?)/.*$ 

如果日期不固定,您可以指定它所在的格式,然后使用该格式,例如\ d {4} - \ d {2} - \ d {2}或任何您需要的格式。