Regular Expression Help

Hi, new to the forum, not new to Ruby but very new to Regular Expression
and they are killing me...

I have strings that look like this:
"--- this is a string ---" = "--- this is a string ---";
" this is a string " = " this is a string ";
"###this is a string" = "###this is a string";

I need to just get both string on each side to the equal sign, not
including the equal sign. I need to get all spaces or characters inside
the quotes but not including the quotes and not the semi-colon. I need
to compare the two strings. So...

this is a string this is a string

I tried using string.scan/regex/ which I like because it returns an
array. Again Fail.

I've tried all kinds of RegEx...I simply don't know what I'm doing and I
very frustrated. I have been using http://rubular.com/ to experiment but
I'm really not having success...

My most successful attempt, [^"=;] gets pretty much what I need but I
can't not select the space around the =.

I've looked at documentation, used Rubular and have tried a lot of
different things.

Can someone please help me?

Thanks

Brad

···

--
Posted via http://www.ruby-forum.com/.

1.9.3-p194 :001 > text = '"--- this is a string ---" = "--- this is a string ---";'
  => "\"--- this is a string ---\" = \"--- this is a string ---\";"
1.9.3-p194 :002 > text.scan(/"(.*?)" = "(.*?)"/).flatten
  => ["--- this is a string ---", "--- this is a string ---"]

···

Am 06.10.2012 01:11, schrieb Brad Askins:

Hi, new to the forum, not new to Ruby but very new to Regular Expression
and they are killing me...

I have strings that look like this:
"--- this is a string ---" = "--- this is a string ---";
" this is a string " = " this is a string ";
"###this is a string" = "###this is a string";

I need to just get both string on each side to the equal sign, not
including the equal sign. I need to get all spaces or characters inside
the quotes but not including the quotes and not the semi-colon. I need
to compare the two strings. So...

this is a string this is a string

I tried using string.scan/regex/ which I like because it returns an
array. Again Fail.

I've tried all kinds of RegEx...I simply don't know what I'm doing and I
very frustrated. I have been using http://rubular.com/ to experiment but
I'm really not having success...

My most successful attempt, [^"=;] gets pretty much what I need but I
can't not select the space around the =.

--
<https://github.com/stomar/&gt;

text.scan(/"(.*?)" = "(.*?)"/).flatten

That worked awesome!!

So I was getting pretty close. I see what I was doing wrong now that I
see the solution.

That's for your help.

I need more practice on RegEx.

Thanks again.

Brad

···

--
Posted via http://www.ruby-forum.com/.

I'd rather use an approach which explicitly includes the "=" sign, for example

irb(main):026:0> text = '"--- this is a string ---" = "--- this is a
string ---";'
=> "\"--- this is a string ---\" = \"--- this is a string ---\";"
irb(main):027:0> if %r{"([^"]*)"\s*=\s*"([^"]*)"} =~ text then p $1, $2 end
"--- this is a string ---"
"--- this is a string ---"
=> ["--- this is a string ---", "--- this is a string ---"]

If one wants to allow escaped quotes inside the string things get a
bit more tricky but that's doable as well:

irb(main):028:0> text = '"--- this is an escaped quote: \"" = "---
this is a string ---";'
=> "\"--- this is an escaped quote: \\\"\" = \"--- this is a string ---\";"
irb(main):029:0> if %r{"((?:\\.|[^"\\])*)"\s*=\s*"((?:\\.|[^"\\])*)"}
=~ text then p $1, $2 end
"--- this is an escaped quote: \\\""
"--- this is a string ---"
=> ["--- this is an escaped quote: \\\"", "--- this is a string ---"]

Of course, you could also include the trailing ";" in the match to be
even more restrictive.

irb(main):030:0> if
%r{"((?:\\.|[^"\\])*)"\s*=\s*"((?:\\.|[^"\\])*)"\s*;} =~ text then p
$1, $2 end
"--- this is an escaped quote: \\\""
"--- this is a string ---"
=> ["--- this is an escaped quote: \\\"", "--- this is a string ---"]

Kind regards

robert

···

On Sat, Oct 6, 2012 at 1:21 AM, <sto.mar@web.de> wrote:

1.9.3-p194 :001 > text = '"--- this is a string ---" = "--- this is a string
---";'
=> "\"--- this is a string ---\" = \"--- this is a string ---\";"
1.9.3-p194 :002 > text.scan(/"(.*?)" = "(.*?)"/).flatten
=> ["--- this is a string ---", "--- this is a string ---"]

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

???

It does.

···

Am 06.10.2012 12:12, schrieb Robert Klemme:

On Sat, Oct 6, 2012 at 1:21 AM, <sto.mar@web.de> wrote:

1.9.3-p194 :001 > text = '"--- this is a string ---" = "--- this is a string
---";'
  => "\"--- this is a string ---\" = \"--- this is a string ---\";"
1.9.3-p194 :002 > text.scan(/"(.*?)" = "(.*?)"/).flatten
  => ["--- this is a string ---", "--- this is a string ---"]

I'd rather use an approach which explicitly includes the "=" sign

--
<https://github.com/stomar/&gt;

Right you are. I let myself irritate by your usage of String#scan.
Sorry for that.

I do not think this is a case for #scan though since according to the
OP's description the String only contains one "assignment". So it's
either "match" or "don't match".

Kind regards

robert

···

On Sat, Oct 6, 2012 at 12:25 PM, <sto.mar@web.de> wrote:

Am 06.10.2012 12:12, schrieb Robert Klemme:

On Sat, Oct 6, 2012 at 1:21 AM, <sto.mar@web.de> wrote:

1.9.3-p194 :001 > text = '"--- this is a string ---" = "--- this is a
string
---";'
  => "\"--- this is a string ---\" = \"--- this is a string ---\";"
1.9.3-p194 :002 > text.scan(/"(.*?)" = "(.*?)"/).flatten
  => ["--- this is a string ---", "--- this is a string ---"]

I'd rather use an approach which explicitly includes the "=" sign

???

It does.

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/