DB2中实现正则表达式.docVIP

  • 1
  • 0
  • 约1.89万字
  • 约 17页
  • 2016-09-21 发布于重庆
  • 举报
DB2中实现正则表达式

DB2中实现正则表达式(1) 2005-12-01 10:00 出处:IBM中国 【导读】本文简略地介绍了正则表达式以及 DB2 中可用的字符串比较和匹配功能。还描述了为什么正则表达式的强大功能是如此有用。 正则表达式 正则表达式用于查找和替换字符串中的模式。正则表达式是用某种语法定义的,正则表达式引擎采用这种语法并将它与字符串进行比较。引擎返回字符串是否与语法匹配的指示;也即,该字符串是否包含能够从该语法派生的子串。此外,引擎还能够返回匹配的子串。术语“模式(pattern)”用来表示语法。 最基本的模式仅由单个字母组成。当与该模式进行比较时,包含这个字母的字符串就是一个“匹配”。例如,如果模式是“a”,则字符串“abcd”就是一个匹配,而字符串“xyz”则不是。正则表达式的强大功能来自于预定义的运算符(也称为元字符),它们可以用很小的空间来表示模式。根据“方言”和受支持的功能,可以使用不同的元字符。通常,其中的一些可用字符如下: | — 二中择一 [ ] — 分组 * — 多次出现(也匹配零次出现) + — 多次出现(至少一次) ? — 随意的出现次数 \\\\ — 反斜杠 不同的系统实现了常用正则表达式的各种扩展。编程语言 Perl 中使用的正则表达式支持进一步的缩写。本文中所用的库实现了这些扩展。下面摘录了其中部分可以在 Perl 正则表达式语言中使用的缩写: \\s — 任意空白字符 \\w — 任意字母数字字符 \\d — 任意数字字符 另一个更高级的示例是模式“[A-Z]* = ([0-9]|0x00);”。与这个模式相匹配的字符串包含这样的子串:它由几个大写字母、后面跟上一个空格、一个等号、另一个空格,然后是一个数字或字符串“0x00”组成。该子串的最后一个字符必须是分号。使用 Perl,这个模式可以表示为“\\w* = (\\d|0x00);”。“NM = 0x00;”和“X = 7;”是两个可以与该模式匹配的字符串。但字符串“Z = 123;”不能匹配,因为 123 是由三个数字所组成的。 DB2 中的字符串匹配 除了 Extender 以外,DB2 还允许几种用于文本比较的函数和运算符。但那些函数和运算符要么在用于模式匹配的功能方面有限制,要么就是会给可能使用它们的查询带来复杂性。这里简要地摘录几个可用的功能: = 或 谓词:逐字符地比较两个字符串是否相等。 LIKE 谓词:使用通配符的基本模式匹配。 LOCATE 函数:在字符串中查找子串。 尽管也可以用 SQL 运算符表示模式“[A-Z]* = ([0-9]|0x00);”,但那样会很麻烦。例如,下列 SELECT 语句的 WHERE 子句中所使用的谓词会匹配字符串“str”中等号之后的部分,如 清单 1所示: 清单 1. 使用 LIKE 匹配模式 SELECT str FROM strTable WHERE ( str LIKE % = 0;% OR str LIKE % = 1;% OR str LIKE % = 2;% OR str LIKE % = 3;% OR str LIKE % = 4;% OR str LIKE % = 5;% OR str LIKE % = 7;% OR str LIKE % = 7;% OR str LIKE % = 8;% OR str LIKE % = 9;% OR str LIKE % = 0x00;% ) 这增加了可以匹配“[A-Z]*”子模式的谓词的复杂度,这可以使用对整个字符串进行迭代并进行逐字符比较的函数来完成,但您会发现使用内置功能既冗长又复杂。 示例方案 让我们定义下列清单( 清单 2)并插入几行: 清单 2. 创建我们的样本表 CREATE TABLE strTable ( c1 INTEGER, str VARCHAR(500) ); INSERT INTO strTable VALUES ( 1, some text; ), ( 2, variable = 1234; ), ( 3, var2 = string variable; ), ( 4, xyz = ), ( 5, myVar = 0x00; ), ( 6, # comment ),

文档评论(0)

1亿VIP精品文档

相关文档