#!/usr/bin/env squirrelsh
// Match a regular expression against text
print("Text: ");
local text = scan();
print("Pattern: ");
local pattern = scan();
local re = regcompile(pattern);
if (!re)
{
printl("Failed to compile regular expression - " + regerror());
exit(1);
}
local matches = regmatch(re, text);
if (!matches)
{
printl("Failed to match regular expression - " + regerror());
regfree(re);
exit(1);
}
regfree(re);
printl("Matches found:");
foreach (match in matches)
printl("t"" + substr(text, match[0], match[1]) + """);
在这里,scan() 从标准输出中读取一些文本和一个模式,但是并不包含通常用于确定正则表达式的起始和结束部分的前斜杠(/)字符。
对于一个模式,函数 reqgcompile() 将编译此模式,这将提高匹配的速度。您可以对 reqgcompile() 函数使用一个标记以启用或禁用区分大小写的功能(等同于 PCRE /i 修饰符),并且可以使用另一个选项针对一行或多行进行匹配(等同于 PCRE /m 选项)。如果没有对正则表达式执行编译,那么所有匹配将失败。
regmatch(re, text) 函数将比较正则表达式和文本,如果没有匹配的话就生成 Null 值,否则生成一个由成对整数组成的数组(双元素数组)。每一对中的第一个整数表示匹配的开始;第二个整数表示匹配结束。这解释了最后一行代码中 substr(text, match[0], match[1]) 的使用。
标签: