Regexp
okibi
okibi at ratedo.com
Thu Jul 12 05:17:35 PDT 2007
Thanks, that's exactly what I was looking for!
Thanks also for the explanation of how the function works. That does make regexp a little easier now and I'll try to get the concept down.
Thanks!
Regan Heath Wrote:
> okibi wrote:
> > I've got another question regarding regexp:
> >
> > If my document is full of variables such as "##var1 " and I want to replace them, with say "<var>var1</var>" how would I go about doing that? The variables now are preceded with two pound signs and ended with a single space.
> >
> > Also, could you please explain how the regexp function that you give me works? I'm trying to understand these, but think I'm not grasping the concept.
> >
> > Thanks!
>
> I'm no regexp expert but I did something similar last night.
>
> You can use std.regexp.sub, eg.
>
> std.regexp.sub(document, r"##([^ ]+) ", r"<var>$1</var>", "gi");
>
> document - your complete document, or part of it.
>
> "gi" - global and case insensitive.
> global means look for the string more than once
> case insensitive is self explanatory
>
>
> r"##([^ ]+) " - wysiwyg pattern:
> ## - look for # followed by #
> ( and ) - forms a group which can be pasted into result
> [^ ]+ - 1 or more characters which are NOT space
> - the pattern finishes with a space
>
> r"<var>$1</var>" - wysiwyg format:
> <var> - literal
> $1 - replace with first group from pattern
> </var> - literal
>
> So, it should look through document for the pattern "##([^ ]+) " and
> replace it with the format "<var>$1</var>"
>
> I tested this with:
>
> import std.regexp, std.stdio;
>
> string document = "This is a test ##bob and ##fred went for a walk to
> ##place how happy I am";
> string pattern = r"##([^ ]+) ";
> string format = r"<var>$1</var>";
>
> void main()
> {
> writefln(std.regexp.sub(document, pattern, format, "gi"));
> }
>
> Seems to work. :)
>
> Regan
More information about the Digitalmars-d-learn
mailing list