AJBM Posted October 9, 2013 at 10:28 PM Report #528280 Posted October 9, 2013 at 10:28 PM Boas! s/(<pattern>*( <expr>) <pattern>*)+/(<subs>*$seq<subs>*)+/ $str="O Mr. quando se ri, mais parece uma Miss"; $str =~ s/(.*)Mr\.(.*)Miss/$1Sr\.$2Menina/; Resultado: O Sr. quando se ri, mais parece uma Menina Alguem pode explicar o porque deste resultado?
Rui Carlos Posted October 11, 2013 at 10:14 AM Report #528456 Posted October 11, 2013 at 10:14 AM Podes começar por estudar isto. .* significa fazer match de qualquer coisa. (.*) significa fazer match de qualquer coisa e capturar o texto que fez match (que depois fica acessível através do $n). Ou seja, tens uma operação de substituição onde o que aparece antes do "Mr." é capturado no $1, e o que aparece entre o "Mr." e "Miss" é capturado em $2. Depois usas estes $1 e $2 para produzires a string de resultado: $1Sr\.$2Menina. Rui Carlos Gonçalves
AJBM Posted October 11, 2013 at 01:41 PM Author Report #528514 Posted October 11, 2013 at 01:41 PM Eu quando faço isto $str =~ s/(.*)quando\.(.*)Miss/$1Sr\.$2Menina/; O resultado nao deveria ser "O Mr. Sr se ri, mais parece uma Menina"; o que aparece antes de quando é capturado $1 e o que aparece entre quando e Miss é capturado em $2.
Rui Carlos Posted October 11, 2013 at 01:49 PM Report #528517 Posted October 11, 2013 at 01:49 PM Tens um \. a mais depois do quando. O \. original era para fazer match do . que aparece depois do Mr. Rui Carlos Gonçalves
AJBM Posted October 12, 2013 at 02:29 PM Author Report #528664 Posted October 12, 2013 at 02:29 PM ok. Tenho esta string $frase="Luis Corte-Real Souza"; O resultado tem de ser L.C.R.S. Eu tenho isto $frase=~s/([A-Z])[a-z- ]*/$1./g; e esta a funcionar. Eu queria saber é porque que assim $frase=~s/([A-Z]*)[a-z- ]*/$1./; nao funciona o resultado é L.Corte-Real Souza
Rui Carlos Posted October 12, 2013 at 05:37 PM Report #528676 Posted October 12, 2013 at 05:37 PM Vê aqui qual o significado que aquele g no fim da primeira expressão regular que apresentaste. Rui Carlos Gonçalves
AJBM Posted October 12, 2013 at 07:17 PM Author Report #528683 Posted October 12, 2013 at 07:17 PM frase="Luis Corte-Real Souza"; $frase=~s/([A-Z]*)[a-z- ]*/$1./; L- como e maiusluca fica $1 u,i,s nao sao logo sao removidas espaco tambem e removido agora porque que não continua? Quando faço isto [A-Z]*- não significa que isto pode ocorrer muitas vezes. Em relação a flag g pelo que percebi ela, aplica a expressao a string toda.
KTachyon Posted October 13, 2013 at 12:11 AM Report #528706 Posted October 13, 2013 at 12:11 AM Porque a expressão só é aplicada uma vez. Para continuar precisas do /g. “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
AJBM Posted October 13, 2013 at 10:26 AM Author Report #528732 Posted October 13, 2013 at 10:26 AM Entao se eu nao usar g, ele aplica a expressao ao primeiro que encontrar e para. Se usar g, ele aplica ate ao fim da string.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now