URL регулярного анализа Java Regex - PullRequest
0 голосов
/ 19 июля 2011

У меня есть URL-адрес FTP, и мне нужно проанализировать URL-адрес, чтобы получить имя пользователя, пароль, имя сервера и каталог.Что может быть обычным опытом для этого?

ex: ftp: // имя пользователя: пароль @ someServer / direcory-name

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

Используйте java.net.URI.Он будет более надежным и, вероятно, будет быстрее.

Проблемы с использованием Regex включают в себя:

  • , либо слишком простое, чтобы иметь дело с крайними случаями, либо слишком сложное/ дорого, потому что он имеет дело с этими случаями, и

  • вряд ли будет правильно обрабатывать% -кодирование.

Например, (оригинал) регулярное выражение, представленное @Larry, не касается случаев, когда в URL нет userInfo и т. д.


Как отмечалось в комментариях, URL является URI, но не (обязательно) наоборот,Но я рекомендую java.net.URI, а не java.net.URL по следующим причинам:

  • имеет лучший анализатор и
  • имеет лучший API для проверки частей анализируемого URL.
1 голос
/ 19 июля 2011

Всякий раз, когда я думаю о регулярных выражениях, я думаю «Perl» и пишу быстрый и грязный шаблон (qr {xxx} x) и проверяю его на тестовом вводе.

В вашем случае, предполагая, что имя пользователяпароль, сервер и имя каталога должны быть проанализированы (и являются обязательными), я бы использовал следующее.Добавьте вопросительные знаки для «дополнительных» частей вашего шаблона, если вы хотите изменить это:

qr{
    ^           # Start of text
    ftp:        # Protocol
    //          # Double slash
    ([^:]+)     # $1 = User Name
    :           # Colon
    ([^@]+)     # $2 = Password
    @           # AT sign
    (.*?)       # $3 = Server name
    /           # Single slash
    (.*?)       # $4 = Directory name
    (\?.*)?     # Question mark ends URI
    $           # End of text
}x;

Теперь, когда у нас есть шаблон, просто удвойте обратную косую черту (в части «Вопросительный знак»), удалите пробелыи комментарии (если хотите), и поместите в строку Java:

"^ftp://([^:]+):([^@]+)@(.*?)/(.*?)(\\?.*)?$";

Используйте это с Pattern / Matcher, и вы сможете уметь извлекать вещи красиво.

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