*(two)/; ele irá corresponder qualquer seqüência de sub disponível na seqüência que começa com "um" e termina com "dois". Recordar que o ponto, seguido pelo asterisco representa qualquer conjunto de caracteres. Note-se que existem dois grupos no padrão. Os grupos são (um) e (dois). Na seqüência disponível, você tem a sub corda, "um", em seguida, depois de uma certa distância, você tem a sub string "dois". O grupo (um) corresponde à sub string "um" na seqüência disponível. O grupo "dois" coincide com a sub string "dois", na seqüência de caracteres disponíveis.
Devido a esta harmonização, a sub string "um" na seqüência disponível é atribuído à variável interna, US $ 1; a seqüência de sub, "dois" na seqüência disponível é atribuído à variável interna, $ 2. No código, as duas últimas declarações imprimir os valores dessas duas variáveis. Se você nunca teve os grupos (parênteses), harmonização ainda iria ocorrer, mas nada seria atribuir às variáveis internas, (US $ 1 e US $ 2). Em outras palavras, nada poderia ser capturado. A saída do código é: $ 1 é: um $ 2 é: dois Você pode ter até 9 grupos (pares de parênteses) no padrão.
Se houver pelo menos 9 sub cordas na seqüência disponível que corresponde às 9 grupos no padrão, em seguida, as 9 sub cordas na seqüência disponível seria atribuído a US $ 1, $ 2 ... $ 9, respectivamente. Essa é a primeira correspondência iria para $ 1; a segunda a 2 $, a terceira a $ 3 e assim por diante. Isto é como você se lembra ou captura sub cordas na seqüência disponível após o cruzamento. Nota: se não houver um grupo, então não haveria nada para se lembrar (sem atribuição ocorrerá); nenhuma captura. Você não precisa ter até 9 grupos no padrão; você pode ter qualquer número menor.
E sobre grupos aninhados considere o seguinte código: use strict; if ("guarda-livros, guarda-livros e livros andam juntas." = ~ /livro (guarda-redes (s |) |) /) {print "Matched \\ n"; } Else {print "Not Matched \\ n"; } Print "\\ $ 1 é:", $ 1, "\\ n"; print "\\ $ 2 é:", $ 2, "\\ n"; pr