 Outro dia o Walter estava falando sobre um comportamento irregular da implementação de expressões regulares em Python, especificamente o token
 Outro dia o Walter estava falando sobre um comportamento irregular da implementação de expressões regulares em Python, especificamente o token \b.Havia uma brincadeira em Ruby com regex que seleciona cada palavra em uma frase e embaralha a ordem das letras, mantendo a primeira e a última em seus lugares.
Para separar as palavras e os elementos de espaçamento entre elas, usava-se uma regex com
\b. Resolvi fazer a brincadeira em Smalltalk, mas descobri que o token também não funciona, portanto precisei fazer uma expressão que representasse cada bloco: ((\w+)|(\W+)).Para reproduzir essa brincadeira, usando Squeak, primeiro usando o System Browser crie um método
shaked na categoria copying da classe String:shaked
    | aux fst i lst temp |
    (self size <= 3) ifTrue: [ ↑ self copy ].
    fst := (self byteAt: 1) asCharacter asString.
    lst := (self byteAt: self size) asCharacter asString.
    aux := self copyFrom: 2 to: self size - 1.
    temp := Array new: aux size factorial.
    i := 0.
    aux permutationsDo: [ :s |
        i := i + 1.
        temp at: i put: (fst, s, lst).
    ].
    ↑ temp at: temp size atRandom.Agora, em um workspace, execute o seguinte código:
| phr |
" Esta é a frase a ser embaralhada "
phr := 'Kodumaro: as sombras da programação'.
Transcript open.
phr regex: '((\w+)|(\W+))' matchesDo: [ :s |
    Transcript show: s shaked.
].
Transcript cr.Selecione tudo (M-a) e execute (M-d).
[]'s
Cacilhas, La Batalema
 
 
 CC-BY: Os textos deste blog podem ser reporduzidos contanto que sejam informados autor e origem.
 CC-BY: Os textos deste blog podem ser reporduzidos contanto que sejam informados autor e origem.