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}