2015-09-02 4 views
4

Я хотел бы узнать что-то об использовании string patterns.String pattern, regular expression

Для электронной почты у меня есть, что

^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]+ 

Это должно быть в порядке, или что-то сделать лучше? Я не хочу ничего сложного, просто базового «дружественного читаемого». Есть ли способ ограничить домен электронной почты для 2-3 символов через выражение?

И URL я начал что-то вроде, что

^(http|https)://[a-zA-Z0-9]+\\.[a-z]+(/[a-zA-Z0-9-_]+)+\\.[a-z_-]+ 

Как продлить туп для параметров URL? Как:

http://hostname.domain/uriFrag1/uriFrag2/someFilename.fileExt?param1=val1&param2=val2 

Любые идеи, как просто сделать шаблон для ?param1=val1&param2=val2?

Могут быть параметры, но они не являются обязательными.

+1

может быть, вы должны сделать некоторые учебники или читать книгу, если вы действительно заинтересованы в том, как работают эти модели;) –

+1

Кстати, [это] (http://ex-parrot.com/~pdw /Mail-RFC822-Address.html) - это регулярное выражение, которое правильно проверяет адреса электронной почты. Это хорошо демонстрирует бесполезность проверки всего с помощью регулярных выражений. (Или, как автор эвфемистически выражает это: 'подталкивает пределы того, что разумно делать с регулярными выражениями.) – biziclop

ответ

3
^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]+ 

Немного об этом. Вероятно, вы также должны добавить. и, возможно, даже +, поскольку оба они довольно распространены в электронных письмах (например, Gmail позволяет оба). Во-вторых, вы можете ограничить количество символов с помощью {from-to}. Итак:

^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]{1,3} 

Однако, возможно, вы захотите рассмотреть вопрос об этом, поскольку только что проданные доменные имена были проданы. Люди могут появляться с электронными письмами .cloud или .email, и вы не захотите их отменить.

Что касается URL:

param1 = знач1 это легко могут быть сопоставлены с

(\\?[a-z]*=[a-z]*)* 

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

(\\?([a-z]*)=([a-z]*))* 
+0

Все, конечно, волшебный кронштейн и звездочка для совпадений матчей :) Вот именно то, что я искал, спасибо – xxxvodnikxxx

+0

FYI - длина java-шаблона должна быть написана следующим образом '{1,3}' :) – xxxvodnikxxx

+0

You ' совершенно верно.Забыл о java tag.Обновил сообщение. – Astrogat

0

Есть много способов сделать это, я нахожу split самый простой. Поскольку все параметры передаются после знака вопроса, вы можете просто:

String params = url.split("\\?")[1]; 

Это настоятельно рекомендуется проверить границы массива в результате, прежде чем пытаться получить доступ к элементам.

+0

Конечно, это путь разделения строк и попытка сопоставить каждый отдельный параметр, но вопрос в том, есть ли какой-то прямой способ сделать это через шаблон :), но спасибо. – xxxvodnikxxx