Если в []
s ввести только один символ, то []
s являются избыточными, поэтому [/]
можно упростить до /
, [:]
можно упростить до :
et c.
Вам также не нужно указывать, что что-то повторяется {1}
время, поэтому их можно удалить.
0-9
внутри []
s можно упростить до \d
:
Применяя вышеизложенное, получим:
([a-zA-Z\d])*(:)?([a-zA-Z\d])*(:)?([a-zA-Z\d])+( )([a-zA-Z\d])+(/)([a-zA-Z\d])+
(:)?
либо захватит :
, либо ничего (null
). Если вам это не нужно, вы можете удалить группу. Точно так же ( )
всегда будет захватывать пробел, который кажется совершенно бессмысленным.
([a-zA-Z\d])*
будет захватывать только последний повтор. Вы можете захотеть ([a-zA-Z\d]*)
или не захватывать что-либо.
Если вы не хотите захватывать что-либо, следовательно, удалив все группы, мы получим:
[a-zA-Z\d]*:?[a-zA-Z\d]*:?[a-zA-Z\d]+ [a-zA-Z\d]+/[a-zA-Z\d]+
Последнее, но не менее важное:
В начале, [a-zA-Z\d]*:?
повторяется дважды, мы можем использовать квантификатор {2}
.
Если вы передаете опцию Pattern.CASE_INSENSITIVE
в Pattern.compile
, вам не нужно каждый раз указывать A-Z
.
Теперь мы получаем:
([a-z\d]*:?){2}[a-z\d]+ [a-z\d]+/[a-z\d]+