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









"Ben Hinkle" <bhinkle mathworks.com> 