正则表达式
正则表达式是字符串处理的重要工具,主要用于字符串的匹配。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