Parte 1: Sim, os dois padrões corresponderão a 1 ou 2 ou 3.
Parte da resposta à sua primeira pergunta é sua segunda pergunta. Curiosamente.
Os parênteses são usados para habilitar referências anteriores e para esclarecer a prioridade / agrupamento do operador.
Colchetes incluem uma classe de caracteres . Eles são usados para corresponder a uma instância do conjunto de caracteres dentro dele.
Por exemplo, \(hello\) corresponderia à palavra "hello" e também a colocaria na variável de referência apropriada ( , , etc.)
Por outro lado, [hello] corresponderia a um caractere SINGLE, um dos conjuntos {e, h, l, o}.
Alguns dados adicionais (apenas informações extras):
Backreferences baseiam-se na sequência do paren aberto, não no paren próximo. Com parêntesis aninhados isso pode se tornar importante. Ignorando caracteres de escape para facilitar a leitura— (this (that) (the other)) resultará em contendo this that the other ; contendo that e contendo the other .
Uma contagem em uma classe de caracteres verifica mais instâncias dessa classe de caracteres. Eles não precisam combinar da mesma maneira. Por exemplo, [0-9] corresponderá a um único dígito e [0-9]{5} corresponderá a cinco dígitos. Se você quiser combinar apenas 5 dígitos repetidos , por exemplo coincide com 77777 ou 33333 mas não com 37497, use uma referência anterior: \([0-9]\){4}