2017-08-09 31 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}或任何您需要的格式。