redefining word boundaries?

J

jmb-d

Is it possible to redefine (temporarily) the meaning of \b in RegExp
situations?

Here's the scenario: I've got some data that looks something like,
"ABCD.E", which I stuff into an array as I encounter each new
instance. Eventually, I will join(", ") these together having
surrounded each of them with single quotes, for use in an SQL "IN
(...)" clause.

At first, I tried doing this with gsub(/\b/, "'"), but found out the
hard way that the period was wreaking havoc with my intended results,
and I got this: 'ABCD'.'E' instead.

My next attempt was to do it by hand, like this: gsub(/^/, "'").gsub(/
$/, "'"). This worked, but seems a bit like a hack.

So my question is whether there's any way to temporarily declare that
a period is NOT to be considered a word boundary.

Thanks, in advance,
jmb-d
 
H

Harry Kakueki

My next attempt was to do it by hand, like this: gsub(/^/, "'").gsub(/
$/, "'"). This worked, but seems a bit like a hack.
Does this give you the proper format?

arr = ["ABCD.E","FGHI.J","KLMN.O"]
puts arr.map{|x|"'#{x}'"}.join(",")

Harry
 
B

byronsalty

Is it possible to redefine (temporarily) the meaning of \b in RegExp
situations?

I think the only way to do this would be to redefine all the
circumstances in which a \b could occur yourself. For instance the 6
cases that I can think of are: ^\w, \W\w, \s\w, \w$, \w\W, \w\s. This
is a pain as you can see here I've done four and it's very ugly:
"ABCD.E foo FG.HI".gsub(/^(\w)/, "'\\1").gsub(/(\w)$/, "\\1'").gsub(/(\w)(\s)/, "\\1'\\2").gsub(/(\s)(\w)/, "\\1'\\2")
=> "'ABCD.E' 'foo' 'FG.HI'"


Alternatively you could pre and post process by replacing "." with
something that doesn't break the boundary "zyzyzy" and then replace
back with "." when you're done inserting the ticks:
"ABCD.E foo FG.HI".gsub(/\./, "zyzyzy").gsub(/\b/, "'").gsub(/zyzyzy/, ".")
=> "'ABCD.E' 'foo' 'FG.HI'"


Neither are very nice solutions.

- Byron
 
J

jmb-d

Does this give you the proper format?

arr = ["ABCD.E","FGHI.J","KLMN.O"]
puts arr.map{|x|"'#{x}'"}.join(",")

Harry --

Yes, that's the result I'm looking for.

Thanks!
 

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