Регулярное выражение моего URL не идеально, как исправить и сделать группы необязательными? - PullRequest
0 голосов
/ 14 января 2019

Проблема: мне нужно, чтобы в моем регулярном выражении была необязательная группа. Конкретно "www" и "(https | http):.

Regex:

/\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_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 голосов
/ 14 января 2019

Чтобы сделать что-то необязательное, вы должны использовать квантификатор ?, который в основном означает ноль или один раз . 1 Теперь, если то, что вы хотите сделать необязательным, больше один символ, вы просто помещаете его в группу (предпочтительно, в группу без захвата) и затем следите за ней с помощью вопросительного знака-квантификатора.

Что-то вроде следующего должно работать для всех ваших примеров:

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

Попробуйте онлайн .


Ссылки:


1 Другим необязательным квантификатором является *, что означает между нулевым и неограниченным временем , но оно не подходит для вашего случая .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...