Jump to content
AJBM

Backtrack

Recommended Posts

AJBM

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?

Share this post


Link to post
Share on other sites
Rui Carlos

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.

Share this post


Link to post
Share on other sites
AJBM

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.

Share this post


Link to post
Share on other sites
AJBM

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

Share this post


Link to post
Share on other sites
AJBM

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.

Share this post


Link to post
Share on other sites
KTachyon

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

Share this post


Link to post
Share on other sites
AJBM

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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.