URL Regex вопросы - PullRequest
       1

URL Regex вопросы

1 голос
/ 11 августа 2010

Я использую это регулярное выражение (((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))* для поиска URL-адресов, единственная проблема в том, что он находит "you ca" - это URL-адрес, как мне изменить его, чтобы ДОЛЖЕН быть период до окончания (в этомрегистр 'ca'), так что 'you ca' больше не будет работать, но 'you.ca' будет

Ответы [ 5 ]

3 голосов
/ 11 августа 2010

Разбор Uris с помощью регулярных выражений - сложная проблема.

Либо используйте библиотеку типа Regexp :: Common :: URI , либо приготовьтесь потратить много времени на изучение группы RFC. Парсинг URI совсем не тривиален, и есть много тонких ошибок, которые нужно сделать.

1 голос
/ 11 августа 2010

Вы забыли экранировать точки в блоке (www. | [A-zA-Z].).

0 голосов
/ 11 августа 2010

Регулярное выражение Джона Грубера на данный момент является лучшим в моем опыте поиска URL.См. Его статью в его блоге: Улучшенный шаблон точного регулярного выражения для соответствия URL Он используется во многих производственных кодах.Существует две версии: одна соответствует любому URL, а другая - только http / https URL.

0 голосов
/ 11 августа 2010

Я использую бесплатное программное обеспечение для проверки своего регулярного выражения: http://www.weitz.de/regex-coach/

возможно, это может быть полезно для вас

0 голосов
/ 11 августа 2010

Вы можете использовать квантификатор для символа точки, поэтому для '\. {1}' потребуется ровно один период, прежде чем что-либо последующее.

Это не то, что является необходимой частью отладки этой проблемы, но это может помочь узнать об этом. Это просто более явно, и '{1}' больше, чем точка, поэтому он также служит разделителем в длинных, безобразных регулярных выражениях, где во время отладки вы можете случайно бросить "+" или "*" рядом с точкой ,

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