ruby regex не должен захватывать протокол - PullRequest
0 голосов
/ 15 марта 2011

Я использую ruby ​​1.8.7.

У меня следующий текст

http://example.com

Я написал это регулярное выражение

http:\/\/(.*).com

Это работает.

Теперь я получил следующий текст

git://example.com

Чтобы заставить это работать, я изменил свое регулярное выражение на

(http|git):\/\/(.*).com

Вышеупомянутый код работает, но я не использую 'http' или 'git'. Кажется, я прошу regex захватить то, что я не собираюсь использовать.

Есть ли более политическая версия этого регулярного выражения, где регулярное выражение не будет захватывать протокол?

Ответы [ 4 ]

5 голосов
/ 15 марта 2011

Используйте (?:http|git) для группы без захвата.

2 голосов
/ 15 марта 2011

Не используйте регулярные выражения для URI.Вместо этого используйте библиотеку URI.

0 голосов
/ 15 марта 2011

Поскольку . перед com подразумевается буквально ., вы должны изменить его на \..

0 голосов
/ 15 марта 2011

Поскольку протокол кажется только буквами, почему бы не сопоставить его с [a-z]?

Я не так часто использую регулярные выражения, но, возможно, это будет работать:

[a-z]*:\/\/(.*).com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...