digitalmars.D.learn - phobos->RegExp
- Alexander Panek (16/16) Apr 04 2005 Hello,
- Ben Hinkle (7/18) Apr 04 2005 I haven't used the regexp module but glancing at the doc r.exec(src_buf)...
- Ben Hinkle (19/31) Apr 04 2005 I think the doc for regexp is misleading and/or incomplete. I'll add som...
- Alexander Panek (6/40) Apr 05 2005 You saved my day, thanks :).
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
Apr 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.
Apr 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; }
Apr 04 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...You saved my day, thanks :). Regards, Alex -- huh? did you say something? :oHello, 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; }
Apr 05 2005