自学内容网 自学内容网

正则表达式

首先要有一个观念:正则表达式一个语句不是完全通用的!它的行为还会受到具体编程语言或工具中正则表达式引擎实现的影响。不同的编程语言或工具可能会有细微的差别,这些差别可能会影响正则表达式的匹配结果。

Delphi XE:

procedure TFrmMain.ExtractALL(const aGuiZhe, AInputString: string);
// uses RegularExpressions
// 整文全匹
var
  regex: TRegEx;
  match: TMatch;
  matches: TMatchCollection;
  options: TRegExOptions;
begin
  options := [roIgnoreCase, roMultiLine, roExplicitCapture];
  regex := TRegEx.Create(aGuiZhe, options);
  matches := regex.matches(AInputString);
  // 遍历匹配项集合
  for match in matches do
    Memo2.Lines.Add(match.Value);
end;

procedure TFrmMain.ExtractFirst(const aGuiZhe, AInputString: string);
// uses RegularExpressions
// 仅匹第一个捕获组
var
  regex: TRegEx;
  match: TMatch;
  options: TRegExOptions;
begin
  // roExplicitCapture  让捕获组失效,所以这里不能用
  options := [roIgnoreCase, roMultiLine];
  regex := TRegEx.Create(aGuiZhe, options);
  match := regex.match(AInputString);
  if match.Success and (match.Groups.Count > 1) then
    Memo2.Lines.Add(match.Groups[1].Value); // 捕获组第一个下标为1,整个匹配组下标才是0
end;

以上代码简介:

仅匹第一个捕获组:正则表达式带小括号()的为捕获组,一句正则表达式语句,如果含有多个小括
号(),那么第一个括号的下标为1也就是第一个捕获组。

整文全匹:就是在整个原文中找到所有的匹配项,全匹就是不带捕获组,正则表达式一个语句捕获组是无效的,全部匹配。

这两种方案基本上可以搞定大部份正则匹配。

另外匹配项和捕获组是不同的概念,举例说明:

比如我要从这句SQL语句中获取表名:select * from MyTable

我用正则表达式为:FROM\s+(\w+)

匹配项返回的是:from MyTable
捕获组返回的是:MyTable


原文地址:https://blog.csdn.net/i8013/article/details/142971519

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!