Ruby RegEx выпуск - PullRequest
       2

Ruby RegEx выпуск

0 голосов
/ 15 июля 2011

У меня проблема с получением моего RegEx для работы со скриптом Ruby.

Вот что я пытаюсь найти:

http://my.test.website.com/{GUID}/{GUID}/

Вот RegEx, который я протестировал и должен соответствовать строке, как показано выше:

/([-a-zA-Z0-9@:%_\+.~#?&\/\/=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)([\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/])*?\/)/

3 группы захвата:

group 1: ([-a-zA-Z0-9@:%_\+.~#?&\/\/=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)([\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/])*?\/)
group 2: (\/[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)
group 3: ([\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\/\/])

Ruby выдает ошибку при попытке проверить соответствие с этим регулярным выражением:

empty range in char class: (My RegEx goes here) (SyntaxError)

Я ценю любые мысли или предложения по этому поводу.

Ответы [ 2 ]

4 голосов
/ 16 июля 2011

Вы могли бы немного упростить ситуацию, используя URI для обработки парсинга URL, \h в регулярном выражении и scan для извлечения GUID:

uri   = URI.parse(your_url)
path  = uri.path
guids = path.scan(/\h{8}-\h{4}-\h{4}-\h{4}-\h{12}/)

Если вам нужны какие-либо компоненты URL, не связанные с путем, вы можете легко извлечь их из uri.

Возможно, вам придется немного ужесточить ситуацию в зависимости от ваших данных, или может быть достаточно проверить, что guids имеет два элемента.

3 голосов
/ 15 июля 2011

У вас есть несколько ошибок в вашем RegEx. Сейчас я очень сонный, поэтому вместо решения я просто дам вам подсказку:

...[\/\/[0-9a-fA-F]....

первый [ не принадлежит там. Кроме того, наличие \/\/ внутри [] не является необходимым - каждый символ нужен только один раз внутри []. Также

...[-a-zA-Z0-9@:%_\+.~#?&\/\/=]{2,256}...

является жадным и включает период - на самом деле, включает все символы (AFAICS), которые могут следовать за ним, эффективно проглатывая всю строку (когда вы избавляетесь от других ошибок). Вместо этого рассмотрим {2,256}?.

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