捕获ruby中的可选参数

时间:2013-02-17 12:15:30

标签: ruby regex

我想要捕获强制参数和可选参数。

假设我有一个字符串

"X or Y"

和“或Y”是可选的。

我能做到

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

并接收一个大小为3的数组,其中还包含可选catch的结果。

如何编写扫描以仅接收2 X和Y可能性的数组?

谢谢

2 个答案:

答案 0 :(得分:3)

您可以将第二部分的外部组设为non-capturing组:

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

现在你的正则表达式中只有两个捕获组:

  • 捕获X部分。
  • 另一个捕获Y部分。

因此,您将收到仅包含这两个组的数组。因此,您将无法获得or部分。

答案 1 :(得分:0)

对于这种情况,我需要相同的答案,我搜索了很多东西以获得更好的解决方案,在玩完逻辑后我终于获得了成功。它在每种情况下都能很好地工作。 URL是否有一个或两个参数。即使我们可以在n个参数中扩展它。很容易做到。

我的问题陈述是,我有两个差异很小的网址。

第一个网址)。 https://thumbor-cdn1.abc.com/unsafe/700x0/filters:quality(90)/https://s3.amazonaws.com/abc/app_photos/images/1528/original/cover_daily-1.jpg

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

您可以看到第一个网址有700x0/filters:quality(90),第二个网址只有一个参数600x0

正则表达式 - (http|https):\/\/thumbor-cdn1.abc.com\/unsafe\/((.*?)|\/(.*?))\/(http|https):\/\/s3.amazonaws.com\/(abc|xyz)

以上网址用于示例目的,对于您的情况,您可以使用有效的网址。 谢谢!