正则表达式

正则表达式是字符串处理的重要工具,主要用于字符串的匹配。Silk内置了如下的正则表达式函数:
_fun("regex_match", str, pattern, option)
regex_match函数是全文匹配,即要求整个字符串符合匹配规则。匹配成功返回一个包含匹配结果的数组,数组的第一个元素为完整匹配结果,后面为匹配子串。
匹配不成功则返回null。参数str是需要匹配的字符串,pattern是匹配规则,option是选项,可以指定忽略大小写等,默认可以忽略。
str="Hello_2021";
pattern="(.{5})_(\\d{4})"//匹配5个任意单字符 + 下划线 + 4个数字
    r=_fun("regex_match",str,pattern);
if(r)
{
    print("match result:");
    for(i=0;i<r.size();i++)
        print(r[i]);
}
执行结果如下:
match result:
Hello_2021
Hello
2021

option有如下选项:
  • EMCAScript: 默认的语法。符合EMCAScript中的正则式。
  • icase: 匹配的时候忽略大小写。
  • nosubs: 不把匹配的子串保存进结果。
  • collate: 对于[a-b]的匹配,考虑地区。
选项可以组合,用|隔开:
str="Hello_2021_y";
pattern="(.{5})_(\\d{4})_Y";
    r=_fun("regex_match",str,pattern,"icase|nosubs"); //忽略大小写,匹配子串不保存进结果
if(r)
{
    for(i=0;i<r.size();i++)
        print(r[i]);
}


_fun("regex_search", str, pattern, option)
regex_search函数是搜索匹配,即搜索字符串中存在符合规则的子字符串,搜索到第一个符合规则的字符串即停止,搜索成功返回包含搜索结果的数组。
参数str是需要搜索的字符串,pattern是匹配规则,option是选项,同regex_match,默认可以忽略。
str="123";
pattern="\\d";
r=_fun("regex_search",str,pattern,"icase");
if(r)
{
    print("search result:");
    //输出搜索结果
    for(i=0;i<r.size();i++)
        print(r[i]);
}
执行结果如下:
search result:
1

_fun("regex_searchall", str, pattern, option)
regex_searhcall函数是搜索字符串中所有存在符合规则的子字符串,搜索成功返回包含搜索结果的数组。
参数str是需要搜索的字符串,pattern是匹配规则,option是选项,同regex_match,默认可以忽略。
str="Goodbye 2020, hello 2021";
pattern="\\d{4}";//匹配四个数字
r=_fun("regex_searchall",str,pattern);
if(r)
{
    print("searchall result:");
    //输出搜索结果
    for(i=0;i<r.size();i++)
        print(r[i]);
}
执行结果如下:
searchall result:
2020
2021


_fun("regex_replace", str, pattern, replace, option)
regex_replace函数是替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串,替换成功返回替换后的字符串。
参数str是需要替换的字符串,pattern是匹配规则,replace是替换字符串,option是选项,同regex_match,默认可以忽略。
str="Hello_2021";
pattern="(.{3})(.{2})_(\\d{4})";//匹配5个任意单字符 + 下划线 + 4个数字
r=_fun("regex_replace",str,pattern,"$1$3");//输出:Hel2021,将字符串替换为第一个和第三个表达式匹配的内容
print("replace result:",r);
执行结果如下:
replace result: Hel2021