问题:我需要我的正则表达式有一个可选组。具体是“ 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”为可选?我的正则表达式安全/良好吗?
答案 0 :(得分:1)
要使某些内容可选,您应该使用?
量词,它基本上表示零或一遍。 1 现在,如果要制作什么可选字符是多个字符,您只需将其放在组(最好是一个非捕获组)中,然后再跟问号-量化符。
以下示例适用于所有示例:
^(?:https?:\/\/)?(?:(?:www|m)\.)?twitter\.com\/\w+\/status\/\d+
1 另一个可选的量词是*
,它表示介于零和无限制时间之间,但它不适合您的情况。 / sub>