match(Xtal)

// param1 type : String, ...
// return type : xpeg::Executor or Null
String::match: method(pattern);

Description

XtalのString::matchは、patternにmatchする文字列があった場合、その文字列をcaptureした瞬間のExecutorを、matchする文字列がなかった場合はnullを返します。

返ってきたExecutorを使うことで、matchした文字列のprefixやsuffixを得ることが出来たり、matchした後の処理を続けることが出来ます。

Example1

“foo”にマッチする文字列が存在する限り処理を続ける

C++

-

Xtal

str : "foobarfoobarhogehoge";
e : str.match("foo");
if (e){
    e.captures{|k, value|
        value.p;
    }
    e.prefix.p;
    e.suffix.p;
 
    while (e.match("foo")){
        e.captures{|k, value|
                value.p;
        }
        e.prefix.p;
        e.suffix.p;
    }
}

Output

foo

barfoobarhogehoge
foo
bar
barhogehoge

Example2

String_gsubの実装

C++

-

Xtal

fun String_gsub(str, pattern, fn){
    mm : MemoryStream();
    exec : str.match(pattern);
    if (exec){
        prefix : exec.prefix;
        mm.put_s(prefix);
        mm.put_s(fn(exec));
 
        while (exec.match(pattern)){
            prefix : exec.prefix;
            mm.put_s(prefix);
            mm.put_s(fn(exec));
        }
 
        mm.put_s(exec.suffix);
        return mm.to_s;
    }
    else {
        return str;
    }
}
 
String_gsub("foobar piyo hoge foo", "foo", "bar").p;

Output

barbar piyo hoge bar
reference/string/match_xtal.txt · 最終更新: 2011/07/03 15:54 by sukai
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0