Thread overview
phobos->RegExp
Apr 04, 2005
Alexander Panek
Apr 04, 2005
Ben Hinkle
Apr 04, 2005
Ben Hinkle
Apr 05, 2005
Alexander Panek
April 04, 2005
Hello,

I got a little problem with the std.regexp.RegExp.match() and .exec() methods. Both are just returning the first match of the pattern in the string..am i doing something wrong?

std.regexp.RegExp r = std.regexp.search(Source, "([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
char[][] buf = r.match(src_buf);
while(1)
{
	Attributes ~= new Attribute(r.exec(src_buf)[0], this);
}

hoping for help =\

Regards,
Alex

-- 
huh? did you say something? :o
April 04, 2005
"Alexander Panek" <alexander.panek@brainsware.org> wrote in message news:opsopz4btty2yy8c@chello080109082145.3.15.vie.surfer.at...
> Hello,
>
> I got a little problem with the std.regexp.RegExp.match() and .exec() methods. Both are just returning the first match of the pattern in the string..am i doing something wrong?
>
> std.regexp.RegExp r = std.regexp.search(Source,
> "([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
> char[][] buf = r.match(src_buf);
> while(1)
> {
> Attributes ~= new Attribute(r.exec(src_buf)[0], this);
> }

I haven't used the regexp module but glancing at the doc r.exec(src_buf) should return an array of matches and then you are indexing only the first element [0] so that is just using the first match. The doc for exec says "returns the next match" but then it says the return is the set of matches so I don't understand what it is actually doing.


April 04, 2005
"Alexander Panek" <alexander.panek@brainsware.org> wrote in message news:opsopz4btty2yy8c@chello080109082145.3.15.vie.surfer.at...
> Hello,
>
> I got a little problem with the std.regexp.RegExp.match() and .exec() methods. Both are just returning the first match of the pattern in the string..am i doing something wrong?
>
> std.regexp.RegExp r = std.regexp.search(Source,
> "([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
> char[][] buf = r.match(src_buf);
> while(1)
> {
> Attributes ~= new Attribute(r.exec(src_buf)[0], this);
> }
>
> hoping for help =\

I think the doc for regexp is misleading and/or incomplete. I'll add some comments to the wiki about that page. The exec(char[]) function does not return the "next" match. That is what exec() does. The exec() function is not in the online doc but it is a public method of the RegExp class so I assume it is ok to call it. Here is a modified version of your posted example that probably comes closer to what you are looking for:

import std.regexp;
int main() {
  char[] Source = "item=\"test\", itemb=\"blah\"";
  printf("%.*s\n",Source);
  RegExp r = new RegExp("([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
  char[][] t = r.exec(Source);
  printf("%d %.*s %.*s %.*s\n",t.length,t[0],t[1],t[2]);
  t = r.exec();
  printf("%d %.*s %.*s %.*s\n",t.length,t[0],t[1],t[2]);
  return 0;
}



April 05, 2005
On Mon, 4 Apr 2005 19:08:45 -0400, Ben Hinkle <ben.hinkle@gmail.com> wrote:

>
> "Alexander Panek" <alexander.panek@brainsware.org> wrote in message
> news:opsopz4btty2yy8c@chello080109082145.3.15.vie.surfer.at...
>> Hello,
>>
>> I got a little problem with the std.regexp.RegExp.match() and .exec()
>> methods. Both are just returning the first match of the pattern in the
>> string..am i doing something wrong?
>>
>> std.regexp.RegExp r = std.regexp.search(Source,
>> "([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
>> char[][] buf = r.match(src_buf);
>> while(1)
>> {
>> Attributes ~= new Attribute(r.exec(src_buf)[0], this);
>> }
>>
>> hoping for help =\
>
> I think the doc for regexp is misleading and/or incomplete. I'll add some
> comments to the wiki about that page. The exec(char[]) function does not
> return the "next" match. That is what exec() does. The exec() function is
> not in the online doc but it is a public method of the RegExp class so I
> assume it is ok to call it. Here is a modified version of your posted
> example that probably comes closer to what you are looking for:
>
> import std.regexp;
> int main() {
>   char[] Source = "item=\"test\", itemb=\"blah\"";
>   printf("%.*s\n",Source);
>   RegExp r = new RegExp("([a-zA-Z]{1,})+=\"+([a-zA-Z0-9]{1,})+\"", "i");
>   char[][] t = r.exec(Source);
>   printf("%d %.*s %.*s %.*s\n",t.length,t[0],t[1],t[2]);
>   t = r.exec();
>   printf("%d %.*s %.*s %.*s\n",t.length,t[0],t[1],t[2]);
>   return 0;
> }
>
>
>

You saved my day, thanks :).

Regards,
Alex

-- 
huh? did you say something? :o