1

我目前正在使用正则表达式在给定字符串中查找一些数据。我希望找到匹配模式在字符串中的位置。

是否可以使用 FreePascal 在给定字符串中找到正则表达式的偏移量?

4

2 回答 2

2

在当前版本中,有两个正则表达式函数。一种只在较新的版本中,但却是最常用的一种(Sorokin's regexpr)。较旧的单元正则表达式更快但更有限的iirc。

我不怎么使用正则表达式,所以我没有给你的示例语法。虽然在 wiki http://wiki.freepascal.org/Regexpr中有一些信息

当然你也可以尝试为 perl pcre 库创建一个头文件。(或回收德尔福一个)

但是,要找到一个简单的子字符串的偏移量,可以使用标准的 POS() 函数。还有一个替换功能。

于 2013-07-08T09:47:34.030 回答
1

这是一个使用标准 RegExpr 单元的示例。

{$APPTYPE CONSOLE}
{$IFDEF FPC}{$MODE DELPHI}{$ENDIF}

uses
  regexpr;

var
  s: string;
  e: TRegExpr;

begin
  s := 'abcdefg';

  e := TRegExpr.Create;
  e.Expression := '[c-f]+';
  e.Exec(s);

  WriteLn(e.Match[0]);    // cdef
  WriteLn(e.MatchPos[0]); // 3
  WriteLn(e.MatchLen[0]); // 4

  e.Free;

  ReadLn;
end.
于 2015-12-10T09:41:24.927 回答