2017-05-30 19 views
2

這裏是我的正則表達式版本:無法獲取正則表達式的工作

Version 1: .*/([^/]+)(?:\.(.*))$ 
Version 2: .*/([^/]+)(?:\.(.*))?$ 

我的替代是

/$1/ 

我的測試字符串是:

Test 1: /features-past/nov-dec-2015/living-with-zill.html?wxY 
Test 2: /features-past/nov-dec-2015/livig-with-zill 

產量預計爲:

/living-with-zill/ 

1版作品在測試1,但不是在測試2(無匹配)

第2名的作品上測試2,但不是在測試1(不匹配)

我以爲0或1的正則表達式(?)會匹配兩者。如何重寫這個版本來讓版本1或2在測試1和2上工作?

謝謝。

+0

請考慮接受這樣的工作最適合你的答案。如果有的話。否則,讓我們知道這裏仍然是個問題。 –

回答

1

你幾乎得到它 - 剛剛錯過使得量詞非貪婪(或不願):

.*/([^/]+?)(?:\.(.*))?$ 

所以對OP的第2版一個修改,該模式的工作原理。只需在+量詞後加一個?,使它變得非貪婪,即([^/]+?)而不是([^/]+)。對於第一個測試字符串這可以確保非貪婪部分只點.之前的文本相匹配,因爲沒有爲.(?:\.(.*))?

Regex101 Demo

測試字符串非捕獲組:

Test 1: /features-past/nov-dec-2015/living-with-zill.html?wxY 
Test 2: /features-past/nov-dec-2015/livig-with-zill 

輸出(後$1取代):

living-with-zill 
livig-with-zill 
1

您可以添加.到否定字符類,並使用

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

regex demo

詳細

  • .*/ - 任何0+字符相匹配的最後/
  • ([^/.]+) - 捕獲1+字符比/.
  • .*其他 - 匹配任何字符0+ 。
0

這裏是我發現的最簡單的方法:

\d\/([^\.]*) 
+1

然而,你不能確定數字:它可能在另一個子路徑之前,然後這將超過。 –

+0

@WiktorStribiżew正則表達式只能根據呈現的摘錄中的模式進行準備;)而這個模式有這種模式...畢竟沒有什麼是可以肯定的! –

+0

這是一個很大的假設(前面的數字),可能不適用於OP的其他數據集 – degant

相關問題