我的URL正则表达式并不完美,如何修复并使组成为可选的?

时间:2019-01-14 00:10:43

标签: regex

问题:我需要我的正则表达式有一个可选组。具体是“ www”和“((https | http):。

正则表达式:

/\A^(https|http):\/\/www\.twitter\.com\/\w+\/status\/\d+/

验证(FYI)

validates :twitter_link, format: { with: /\A^(https|http):\/\/www\.twitter\.com\/\w+\/status\/\d+/}

我需要将“ www”设为可选。其他一切似乎都正常。

我需要(按顺序):

  • 可能以“ http:”或“ https:”开头。

  • 必须包括:“ twitter.com /”。

  • 必须包括:“ twitter.com/”之后的任何字母/数字/字符。

  • 必须在Twitter#{twitter_user_name_}后加上“状态”,例如“ / gem / status”。

  • 必须包括:仅“ status /”之后的数字

这些可能的链接:

可能的链接:

urls = [
  "https://twitter.com/Twitt_erDev/status/850006245121695744",
  "http://twitter.com/Twit1243terDev/status/850006245121695744",
  "https://www.twitter.com/Twi234_tterDev/status/850006245121695744",
  "http://www.twitter.com/TwitterDev/status/850006245121695744",
  "http://m.twitter.com/Tw11itterDev/status/850006245121695744",
  "https://m.twitter.com/Tw11itterDev/status/850006245121695744",
  "www.twitter.com/Twitt11erDev/status/850006245121695744",
  "m.twitter.com/Tw11itterDev/status/850006245121695744",
  "twitter.com/Twitte345_rDev/status/850006245121695744",
]

如何使“ www”和“ http / https”为可选?我的正则表达式安全/良好吗?

1 个答案:

答案 0 :(得分:1)

要使某些内容可选,您应该使用?量词,它基本上表示零或一遍 1 现在,如果要制作什么可选字符是多个字符,您只需将其放在组(最好是一个非捕获组)中,然后再跟问号-量化符。

以下示例适用于所有示例:

^(?:https?:\/\/)?(?:(?:www|m)\.)?twitter\.com\/\w+\/status\/\d+

Try it online


参考:


1 另一个可选的量词是*,它表示介于零和无限制时间之间,但它不适合您的情况。 / sub>