\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