电脑技术学习

对话 UNIX: Squirrel--可移植的 shell 和脚本语言

dn001

 
#!/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]) 的使用。

标签: