Delphi 正则表达式应用


Delphi 正则表达式应用 Delphi 正则 表达 式之 TPerlRegEx 类的 属性 与方 法 (1): 查找 ////////查 找是否存在 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; if reg.Match then ShowMessage('找到 了 ') else ShowMessage('没找 到 '); FreeAndNil(reg); end; ////////查 找是否存在 ((((方法2)2)2)2) var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; reg.Match; //执行 查找 if reg.FoundMatch then //布尔 变量 FoundMatch 会告 诉我 们查 找有 没有 结果 ShowMessage('找到 了 ') else ShowMessage('没找 到 '); FreeAndNil(reg); end; ////////显 示找到的第一个 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; if reg.Match then ShowMessage(reg.MatchedExpression) //2 else ShowMessage('没找 到 '); FreeAndNil(reg); end; ////////分 别显示找到的每一个和总数 var reg: TPerlRegEx; num: Integer; //用num 来计 数 begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; num := 0; while reg.MatchAgain do //MatchAgain 是下 一个 begin ShowMessage(reg.MatchedExpression); //将分 别显 示 : 2 0 0 7 3 2 Inc(num); end; ShowMessage(IntToStr(num)); //6 FreeAndNil(reg); end; ////////分 别显示找到的每一个和总数 ((((另 一种写法 )))) var reg: TPerlRegEx; num: Integer; //用num 来计 数 begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; num := 0; if reg.Match then begin repeat ShowMessage(reg.MatchedExpression); //将分 别显 示 : 2 0 0 7 3 2 Inc(num); until (not reg.MatchAgain); end; ShowMessage(IntToStr(num)); //6 FreeAndNil(reg); end; ////////目 标字符串的位置与长度 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := 'Delphi'; while reg.MatchAgain do //很明 显 : 本例 只能 找到 一个 结果 begin ShowMessage(reg.MatchedExpression); //找到 的字 符串 : Delphi ShowMessage(IntToStr(reg.MatchedExpressionOffset)); //它所 在的 位置 : 10 ShowMessage(IntToStr(reg.MatchedExpressionLength)); //它的 长度 : 6 end; FreeAndNil(reg); end; DelphiDelphiDelphiDelphi 正 则表达式 之 TPerlRegExTPerlRegExTPerlRegExTPerlRegEx 类 的属性与方法 (2):(2):(2):(2): 关 于子表达式 //////// MatchedExpressionMatchedExpressionMatchedExpressionMatchedExpression 与SubExpressions[0]SubExpressions[0]SubExpressions[0]SubExpressions[0] var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007'; reg.RegEx := 'Delphi'; while reg.MatchAgain do begin ShowMessage(reg.MatchedExpression); //Delphi; 这是 匹配 到的 内容 ShowMessage(reg.SubExpressions[0]); //Delphi; 也可 以这 样显 示匹 配到 的内 容 end; { SubExpressions 是一 个数 组 : SubExpressions[1] 储存 第 1 个表 达式 匹配 的内 容 ; SubExpressions[2] 储存 第 2 个表 达式 匹配 的内 容 ; SubExpressions[n] 储存 第 n 个表 达式 匹配 的内 容 ; SubExpressions[0] 储存 整个 表达 式匹 配的 内容 ; MatchedExpression 表示 的不 过是 SubExpressions[0]. } FreeAndNil(reg); end; ////////提 取子表达式匹配到的内容 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'abc A1111 BB222 CCC33 DDDD4'; reg.RegEx := '\b([A-D]+)([1-4]+)\b'; //这个 表达 式有 两个 子表 达式 构成 while reg.MatchAgain do begin ShowMessage(reg.SubExpressions[0]); //将分 别显 示 : A1111 BB222 CCC33 DDDD4 ShowMessage(reg.SubExpressions[1]); //将分 别显 示 :ABBCCCDDDD ShowMessage(reg.SubExpressions[2]); //将分 别显 示 : 1111 222 33 4 {另外 : reg.SubExpressionCount 是子 表达 式的 个数 ; reg.SubExpressionLengths[n] 是第 n 个表 达式 返回 的字 符串 的长 度 ; reg.SubExpressionOffsets[n] 是第 n 个表 达式 返回 的字 符串 在源 字符 串中 的位 置 } end; FreeAndNil(reg); end; // 子表达式不能超过MAX_SUBEXPRESSIONS = 99 个,MAX_SUBEXPRESSIONS 是 TPerlRegEx 的内 置常 数 . DelphiDelphiDelphiDelphi 正 则表达式 之 TPerlRegExTPerlRegExTPerlRegExTPerlRegEx 类 的属性与方法 (3):(3):(3):(3): StartStartStartStart、StopStopStopStop ////////设 定搜索范围 :::: StartStartStartStart、StopStopStopStop var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'ababab'; reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Start := 1; reg.Stop := 2; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回 : ◆abab reg.Subject := 'ababab'; reg.Start := 3; reg.Stop := 4; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回 : ab◆ab reg.Subject := 'ababab'; reg.Start := 5; reg.Stop := 6; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回 : abab◆ FreeAndNil(reg); end; //////// ReplaceReplaceReplaceReplace var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Subject := 'ababab'; reg.ReplaceAll; ShowMessage(reg.Subject); //返回 : ◆◆ ◆ reg.Subject := 'ababab'; //下面 四行 程序 , 相当 于 reg.ReplaceAll; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject); //返回 : ◆◆ ◆ FreeAndNil(reg); end; { ReplaceAll 函数 返回 的是 Boolean; Replace 函数 返回 的是 Replacement 的值 , 当然 是不 能赋 值的 , 它仅 仅是 返回 值 . } //////// CompileCompileCompileCompile、StudyStudyStudyStudy var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Options := [preCaseLess]; reg.Compile; {编译 表达 式 } reg.Study; {Study 方法 会检 查是 否编 译 , 如果 没有 编译 则执 行 Compile} reg.Replacement := '◆'; reg.Subject := 'abAbaB'; reg.ReplaceAll; ShowMessage(reg.Subject); {返回 : ◆◆ ◆ } FreeAndNil(reg); end; { 编译 表达 式 , 会加 快执 行速 度、 降低 启动 速度 ; 如果 表达 式比 较复 杂而 又多 次执 行 , 应该 先编 译 ; 编译 内容 包括 表达 式选 项 . } //////// EscapeRegExCharsEscapeRegExCharsEscapeRegExCharsEscapeRegExChars 函 数可以自动为特殊 字 符加转义符 号 \\\\ var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'C++Builer'; reg.RegEx := reg.EscapeRegExChars('C+') + '{2}'; {相当 于 'C\+{2}'} reg.Replacement := '◆'; reg.ReplaceAll; ShowMessage(reg.Subject); {返回 : ◆Builer} FreeAndNil(reg); end; ////////字 符串分割 :::: SplitSplitSplitSplit var reg: TPerlRegEx; List: TStrings; begin List := TStringList.Create; reg := TPerlRegEx.Create(nil); reg.Subject := 'aaa,bbb,ccc,ddd'; reg.RegEx := ',';{这里 可是 运行 相当 复杂 的分 割符 啊 } reg.Split(List,MaxInt); {第一 个参 数读 入的 是 Subject; 第二 个参 数是 分成 多少 份 } { 输入 一个 最大 整数 , 表示 能分 多少 就分 多少 } ShowMessage(List.Text); {返回 : aaa bbb ccc ddd } FreeAndNil(reg); List.Free; end;
还剩5页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

yangxk666

贡献于2011-12-27

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf