Thread overview | ||||||
---|---|---|---|---|---|---|
|
April 04, 2005 phobos->RegExp | ||||
---|---|---|---|---|
| ||||
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 Re: phobos->RegExp | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alexander Panek | "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 Re: phobos->RegExp | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alexander Panek | "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 Re: phobos->RegExp | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | 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 |
Copyright © 1999-2021 by the D Language Foundation