正则表达式

[复制链接]
发表于 2026-1-6 11:24:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
起主要有一个观念:正则表达式一个语句不是完全通用的!它的举动还会受到具体编程语言或工具中正则表达式引擎实现的影响。差别的编程语言或工具大概会有渺小的差别,这些差别大概会影响正则表达式的匹配结果。
Delphi XE:
  1. procedure TFrmMain.ExtractALL(const aGuiZhe, AInputString: string);
  2. // uses RegularExpressions
  3. // 整文全匹
  4. var
  5.   regex: TRegEx;
  6.   match: TMatch;
  7.   matches: TMatchCollection;
  8.   options: TRegExOptions;
  9. begin
  10.   options := [roIgnoreCase, roMultiLine, roExplicitCapture];
  11.   regex := TRegEx.Create(aGuiZhe, options);
  12.   matches := regex.matches(AInputString);
  13.   // 遍历匹配项集合
  14.   for match in matches do
  15.     Memo2.Lines.Add(match.Value);
  16. end;
  17. procedure TFrmMain.ExtractFirst(const aGuiZhe, AInputString: string);
  18. // uses RegularExpressions
  19. // 仅匹第一个捕获组
  20. var
  21.   regex: TRegEx;
  22.   match: TMatch;
  23.   options: TRegExOptions;
  24. begin
  25.   // roExplicitCapture  让捕获组失效,所以这里不能用
  26.   options := [roIgnoreCase, roMultiLine];
  27.   regex := TRegEx.Create(aGuiZhe, options);
  28.   match := regex.match(AInputString);
  29.   if match.Success and (match.Groups.Count > 1) then
  30.     Memo2.Lines.Add(match.Groups[1].Value); // 捕获组第一个下标为1,整个匹配组下标才是0
  31. end;
复制代码
以上代码简介:
仅匹第一个捕捉组:正则表达式带小括号()的为捕捉组,一句正则表达式语句,假如含有多个小括
号(),那么第一个括号的下标为1也就是第一个捕捉组。
整文全匹:就是在整个原文中找到全部的匹配项,全匹就是不带捕捉组,正则表达式一个语句捕捉组是无效的,全部匹配。
这两种方案根本上可以搞定大部份正则匹配。
别的匹配项和捕捉组是差别的概念,举例分析:
好比我要从这句SQL语句中获取表名:select * from MyTable
我用正则表达式为:FROM\s+(\w+)
匹配项返回的是:from MyTable
捕捉组返回的是:MyTable
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表