regex and lookahead to specific number of chars

A

Adam Akhtar

If I have a string such as
"I love ruby, i really do love ruby, oh yes i do blah blah blah"

and i want to insert an asterix at every 10th char whether its a
whitespace, digit whatever how do i go about it

i was trying

string.gsub!(/[.]{10}/, "*")

but it doesnt work

any hints???
 
F

F. Senault

Le 25 février à 21:28, Adam Akhtar a écrit :
and i want to insert an asterix at every 10th char whether its a
whitespace, digit whatever how do i go about it

i was trying

string.gsub!(/[.]{10}/, "*")

What about string.gsub!(/(.{9})./, '\1*') ?

Fred
 
R

Robert Klemme

If I have a string such as
"I love ruby, i really do love ruby, oh yes i do blah blah blah"

and i want to insert an asterix at every 10th char whether its a
whitespace, digit whatever how do i go about it

i was trying

string.gsub!(/[.]{10}/, "*")

but it doesnt work

any hints???

Remove the square brackets around the dot. The dot is meta only outside
of them.

Cheers

robert
 
A

Adam Akhtar

Thanks Fred and Robert for that.

I dont understand what the \1 does. I know if i remove it it removes all
the characters before the 10th and if i include it in keeps them. Why is
this?
 
A

Adam Akhtar

oh and a totally newb question but when i try to substitute the asterix
with a newline \n it just prints it instead of creating a newline, why
is that???

i wish there some regex exercises out there instead of the usual
tutorial only stuff.
 
M

Mark Bush

Adam said:
I dont understand what the \1 does. I know if i remove it it removes all
the characters before the 10th and if i include it in keeps them. Why is
this?

When you put a regexp in round brackets, what it matches is remembered.
In a replacement string, you can then refer to them as \1, \2, etc.
oh and a totally newb question but when i try to substitute the asterix
with a newline \n it just prints it instead of creating a newline, why
is that???

Since the replacement string is in single quotes, \n is not special so
represents the two characters \ and n. To get a newline, you need to
put \n in double quotes ("\n"). In double quotes, the backslash quotes
any character, so \1 would become the character with code 1. So in
double quotes, the \1 needs to be \\1 so:

string.gsub!(/(.{9})./, "\\1*")

for the original example and:

string.gsub!(/(.{9})./, "\\1\n")

for the newline example.
 
F

F. Senault

Le 27 février à 23:40, Adam Akhtar a écrit :
Thanks Fred and Robert for that.

I dont understand what the \1 does. I know if i remove it it removes all
the characters before the 10th and if i include it in keeps them. Why is
this?

It's a reference to the first parenthesied group. To decompose the
expression :

( => begin group 1
.{9} => find exactly 9 characters
) => end group 1
. => followed by exactly one character

I replace that whole group by the first group (my 9 characters) and a
star.

There are best ways to do it (especially if you're manipulating very big
strings, I think), but I think it's the clearest.

Fred
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top