2013-02-17 86 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)

上述网址用于例如宗旨,为你的情况,你可以使用有效的网址。 谢谢!