2013-02-17 49 views
2

我想捕獲一個必需參數和一個可選參數。在ruby中捕獲可選參數

可以說我有一個字符串

"X or Y" 

和 「或Y」 是可選的。

我可以做

scan /(.*) (or (.*))?/ 

和接收與大小3的陣列,其還包括用於可選的捕獲結果。

我該如何寫掃描才能獲得僅有2 X和Y可能性的數組?

謝謝

+1

您可以嘗試使外部組可選 - '/(.*)(?:或(。*))?/' – 2013-02-17 12:16:59

+0

很好用!你可以解釋嗎? – kambi 2013-02-17 12:25:02

+0

'(?:...)'創建一個非捕獲組,這不會增加總組計數。所以,你不會把它作爲單獨的組。 – 2013-02-17 12:31:02

回答

3

您可以進行第二部分的外組作爲non-capturing組:

/(.*) (?:or (.*))?/ 

現在你只有兩個在你的正則表達式捕獲組:

  • 一種捕獲X部分。
  • 另一個捕獲Y部分。

因此,您將只收到一個包含這兩個組的數組。因此你不會得到or部分。

0

我對這個場景需要相同的答案,爲了得到更好的解決方案,我搜索了很多東西,最終我得到了成功。在任何情況下,它都可以很好地工作。 URL是否有一個或兩個參數。即使我們可以用n個參數來擴展它。很容易做到。

我的問題陳述是,我有兩個網址差異很小。

1st URL)。 https://thumbor-cdn1.abc.com/unsafe/700x0/filters:quality(90)/https://s3.amazonaws.com/abc/app_photos/images/1528/original/cover_daily-1.jpg

第2個URL)。 https://thumbor-cdn1.abc.com/unsafe/600x0/https://s3.amazonaws.com/abc/users/images/000/263/588/blurred_preview/263588-profile-image-HYU0HBxA5c.jpg

你可以看到,第一個URL有700x0/filters:quality(90)和第二網址只有一個參數600x0

而正則表達式是 - (http|https):\/\/thumbor-cdn1.abc.com\/unsafe\/((.*?)|\/(.*?))\/(http|https):\/\/s3.amazonaws.com\/(abc|xyz)

上述網址用於例如宗旨,爲你的情況,你可以使用有效的網址。 謝謝!