2016-12-02 124 views
-1

我很難在我的正則表達式中匹配多個模式,我想知道什麼可能是錯的。在正則表達式中匹配多個表達式

我的測試字符串:https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438

這些預期工作:

/https:\/\/api\.github\.com\/repos\/ 

匹配:https://api.github.com/repos/

/\/releases\/.* 

匹配:/發行/ 1261438

我的問題是怎麼做的我把這兩個結合成一個聲明?這是我嘗試過的,但它只匹配第一個模式,而不是第二個模式,因爲某些原因。

/(https:\/\/api\.github\.com\/repos\/)|(\/releases\/.*)/ 

匹配:https://api.github.com/repos/

我在做什麼錯?爲什麼第二種模式被忽略?

+1

你是如何測試最後一個正則表達式的?請參閱https://regex101.com/r/K3VRZo/1 –

+0

它看起來像添加全局標誌的伎倆。現在弄清楚如何讓紅寶石玩得好。 :) 謝謝! –

+0

所以,問題是關閉=主題,因爲你沒有在目標環境中運行正則表達式。如何測試在線測試人員的正則表達式是無關緊要的。你想編輯問題以顯示真正的問題,還是應該關閉它? –

回答

1

|運算符的正則表達式。它確實不是做串聯。嘗試從您的正則表達式字符串中刪除|字符並查看魔法。

正則表達式/(https:\/\/api\.github\.com\/repos\/).*(\/releases\/.*)/有竅門。

+0

但是當我運行這個(通過https://regex101.com/),它匹配整個字符串。我在Ruby中試圖做的是匹配第一種模式和第二種模式,並將它們除去,留下遺留下來的東西。我期待的是「匹配這種模式和這種模式」。這可能嗎? –

+0

所需的分組('()'中的內容已經存在)。請參閱[此處](http://stackoverflow.com/a/9304049/284416)以瞭解如何訪問分組的子表達式匹配。否則,只需使用特殊匹配變量** $ 1 .. $ n **來訪問那些(更多關於此[此處](http://stackoverflow.com/a/9304046/2844164))。請注意,這些特殊的匹配變量幾乎適用於任何支持正則表達式匹配的語言。 – Quirk