Delphi - TPerlRegEx / RegExBuddy 问题

发布于 2024-08-24 04:47:50 字数 25445 浏览 2 评论 0原文

我在 RegEx 和 Delphi 2k9 (Win32) 方面遇到问题。我收到以下错误: 第一次机会例外,价格为 $7C812AFB。异常类异常,消息为“TPerlRegEx.Compile() - 请首先在 RegEx 中指定正则表达式”。 我从网站上获得了最新版本的 TPerlRegEx。使用其默认设置(使用 DLL)

我包含演示源代码。它使用 RegExBuddy 最新版本生成的代码。

http://www.4shared.com/file/236428923/97478b61/googleresultstestdata.html http://www.4shared.com/file/236439483/e0acbe6d/Unit2.html德尔福表格 http://www.4shared.com/file/236439473/6734a2a2/Unit2.html Delphi PAS

感谢您的帮助

-Brad

数据来自 Google 外部关键字工具 RegEx 可以使用一些改进...但是在 RegExBuddy 中工作而不是在 Delphi

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PerlRegEx;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
 Regex: TPerlRegEx;
 GroupIndex: Integer;
begin
Regex := TPerlRegEx.Create(nil);
Regex.RegEx := 'criteria\.push\(new kpCriterion\(&#39;(?P<keyword>(.*?))&#39;, (?P<number1>(.*?)),'#13#10'''(?P<localsearch>(.*?))'', ''(?P<globalsearch>(.*?))'', (?P<localsearchnum>(.*?)), (?P<globalsearchnum>(.*?)), (.*+)'#13#10','#13#10'&#39;\$(?P<price>(.*?))&#39;, (?P<number2>(.*?)),'#13#10'&#39;(?P<range>(.*?))&#39;, (?P<number3>(.*+))';
Regex.Options := [preMultiLine];
Regex.Subject := memo1.text;
if Regex.Match then begin
  memo2.Lines.Add('Matches Found');
 repeat
  for GroupIndex := 0 to Regex.SubExpressionCount do begin
         memo2.lines.add( Regex.SubExpressions[GroupIndex]); //Add Results to memo
   // backreference text: Regex.SubExpressions[GroupIndex];
   // backreference start: Regex.SubExpressionOffsets[GroupIndex];
   // backreference length: Regex.SubExpressionLengths[GroupIndex];
  end;
 until not Regex.MatchAgain;
end
else
memo2.Lines.Add('No-Matches Found');
end;

end.

DFM中工作

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 247
  ClientWidth = 480
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 8
    Top = 8
    Width = 185
    Height = 89
    Lines.Strings = (
      'var showImpressions = false; var '
      'criteriaSuggestor = '
      '&#39;sensei_keyword&#39;; var '
      'historicalTimePeriod = &#39;Mar '
      '2009 - Feb 2010&#39;; var '
      'historicalStartMonth = 2; var '
      'impressionTimePeriod = '
      '&#39;February&#39;; var '
      'criteriaGroupsArray = new Array(); '
      'var captchaError = false; var '
      'quotaExceeded = false;'
      'var criteria = new Array();'
      'var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.4'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;thunderstorm&#3'
      '9;, 1.9117305278778076,'
      #39'201,000'#39', '#39'550,000'#39', 201000, '
      '550000, 0.8666667'
      ','
      '&#39;$0.49&#39;, 493102,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.42'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.46'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.36'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;[thunderstorm]&'
      '#39;, 1.9117305278778076,'
      #39'33,100'#39', '#39'90,500'#39', 33100, 90500, '
      '0.8666667'
      ','
      '&#39;$0.49&#39;, 493102,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '3'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.4'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;\42thunderstorm\'
      '042&#39;, 1.9117305278778076,'
      #39'201,000'#39', '#39'450,000'#39', 201000, '
      '450000, 0.8666667'
      ','
      '&#39;$0.49&#39;, 493102,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.64'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.53'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.58'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;thunderstorms&#'
      '39;, 1.8268921375274658,'
      #39'110,000'#39', '#39'201,000'#39', 110000, '
      '201000, 0.8'
      ','
      '&#39;$0.56&#39;, 559074,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.83'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.42'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.41'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.39'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.51'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;[thunderstorms]&'
      '#39;, 1.8268921375274658,'
      #39'22,200'#39', '#39'40,500'#39', 22200, 40500, '
      '0.8'
      ','
      '&#39;$0.56&#39;, 559074,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.64'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.53'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.58'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;\42thunderstorms'
      '\042&#39;, 1.8268921375274658,'
      #39'110,000'#39', '#39'165,000'#39', 110000, '
      '165000, 0.8'
      ','
      '&#39;$0.56&#39;, 559074,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;lightning '
      'storm&#39;, 1.774579644203186,'
      #39'49,500'#39', '#39'90,500'#39', 49500, 90500, '
      '0.73333335'
      ','
      '&#39;$0.54&#39;, 535666,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.97'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.98'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.86'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;[lightning '
      'storm]&#39;, 1.774579644203186,'
      #39'12,100'#39', '#39'22,200'#39', 12100, 22200, '
      '0.73333335'
      ','
      '&#39;$0.54&#39;, 535666,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.85'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.65'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;\42lightning '
      'storm\042&#39;, '
      '1.774579644203186,'
      #39'33,100'#39', '#39'60,500'#39', 33100, 60500, '
      '0.73333335'
      ','
      '&#39;$0.54&#39;, 535666,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.66'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.74'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;rain storm&#39;, '
      '1.7464053630828857,'
      #39'27,100'#39', '#39'49,500'#39', 27100, 49500, '
      '0.6666667'
      ','
      '&#39;$0.53&#39;, 526334,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '0'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.55'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.74'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.89'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;[rain '
      'storm]&#39;, '
      '1.7464053630828857,'
      #39'5,400'#39', '#39'8,100'#39', 5400, 8100, '
      '0.6666667'
      ','
      '&#39;$0.53&#39;, 526334,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '2'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.62'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.59'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.66'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;\42rain '
      'storm\042&#39;, '
      '1.7464053630828857,'
      #39'14,800'#39', '#39'27,100'#39', 14800, 27100, '
      '0.6666667'
      ','
      '&#39;$0.53&#39;, 526334,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '0'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.78'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;lightning '
      'storms&#39;, '
      '1.6842896938323975,'
      #39'14,800'#39', '#39'27,100'#39', 14800, 27100, '
      '0.73333335'
      ','
      '&#39;$0.42&#39;, 417108,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.9'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.9'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.88'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.63'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;[lightning '
      'storms]&#39;, '
      '1.6842896938323975,'
      #39'3,600'#39', '#39'8,100'#39', 3600, 8100, '
      '0.73333335'
      ','
      '&#39;$0.42&#39;, 417108,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.8'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.86'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.99'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.83'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.85'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.78'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.91'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      '));'
      'criteria.push(new '
      'kpCriterion(&#39;\42lightning '
      'storms\042&#39;, '
      '1.6842896938323975,'
      #39'12,100'#39', '#39'22,200'#39', 12100, 22200, '
      '0.73333335'
      ','
      '&#39;$0.42&#39;, 417108,'
      '&#39;1 - 3&#39;, 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      '&#39;&#39;'
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation =

I've got a problem with RegEx and Delphi 2k9 (Win32). I get the following Error:
First chance exception at $7C812AFB. Exception class Exception with message 'TPerlRegEx.Compile() - Please specify a regular expression in RegEx first'.
I've got the latest version of TPerlRegEx from the website. Using its defualt settings (Using DLL)

I'm including demo source code. It's using the code generated by RegExBuddy, latest version.

http://www.4shared.com/file/236428923/97478b61/googleresultstestdata.html
http://www.4shared.com/file/236439483/e0acbe6d/Unit2.html Delphi FORM
http://www.4shared.com/file/236439473/6734a2a2/Unit2.html Delphi PAS

Thanks for any help

-Brad

Data is from Google External Keyword Tool
RegEx could use some refinement... but works in RegExBuddy not in Delphi

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PerlRegEx;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
 Regex: TPerlRegEx;
 GroupIndex: Integer;
begin
Regex := TPerlRegEx.Create(nil);
Regex.RegEx := 'criteria\.push\(new kpCriterion\('(?P<keyword>(.*?))', (?P<number1>(.*?)),'#13#10'''(?P<localsearch>(.*?))'', ''(?P<globalsearch>(.*?))'', (?P<localsearchnum>(.*?)), (?P<globalsearchnum>(.*?)), (.*+)'#13#10','#13#10''\$(?P<price>(.*?))', (?P<number2>(.*?)),'#13#10''(?P<range>(.*?))', (?P<number3>(.*+))';
Regex.Options := [preMultiLine];
Regex.Subject := memo1.text;
if Regex.Match then begin
  memo2.Lines.Add('Matches Found');
 repeat
  for GroupIndex := 0 to Regex.SubExpressionCount do begin
         memo2.lines.add( Regex.SubExpressions[GroupIndex]); //Add Results to memo
   // backreference text: Regex.SubExpressions[GroupIndex];
   // backreference start: Regex.SubExpressionOffsets[GroupIndex];
   // backreference length: Regex.SubExpressionLengths[GroupIndex];
  end;
 until not Regex.MatchAgain;
end
else
memo2.Lines.Add('No-Matches Found');
end;

end.

DFM

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 247
  ClientWidth = 480
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 8
    Top = 8
    Width = 185
    Height = 89
    Lines.Strings = (
      'var showImpressions = false; var '
      'criteriaSuggestor = '
      ''sensei_keyword'; var '
      'historicalTimePeriod = 'Mar '
      '2009 - Feb 2010'; var '
      'historicalStartMonth = 2; var '
      'impressionTimePeriod = '
      ''February'; var '
      'criteriaGroupsArray = new Array(); '
      'var captchaError = false; var '
      'quotaExceeded = false;'
      'var criteria = new Array();'
      'var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.4'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      '));'
      'criteria.push(new '
      'kpCriterion('thunderstorm'
      '9;, 1.9117305278778076,'
      #39'201,000'#39', '#39'550,000'#39', 201000, '
      '550000, 0.8666667'
      ','
      ''$0.49', 493102,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      ''''
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.42'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.46'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.36'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      '));'
      'criteria.push(new '
      'kpCriterion('[thunderstorm]&'
      '#39;, 1.9117305278778076,'
      #39'33,100'#39', '#39'90,500'#39', 33100, 90500, '
      '0.8666667'
      ','
      ''$0.49', 493102,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '3'
      ','
      ''''
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.43'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.4'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.45'
      '));'
      'criteria.push(new '
      'kpCriterion('\42thunderstorm\'
      '042', 1.9117305278778076,'
      #39'201,000'#39', '#39'450,000'#39', 201000, '
      '450000, 0.8666667'
      ','
      ''$0.49', 493102,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      ''''
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.64'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.53'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.58'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      '));'
      'criteria.push(new '
      'kpCriterion('thunderstorms&#'
      '39;, 1.8268921375274658,'
      #39'110,000'#39', '#39'201,000'#39', 110000, '
      '201000, 0.8'
      ','
      ''$0.56', 559074,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.83'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.42'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.41'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.39'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.5'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.51'
      '));'
      'criteria.push(new '
      'kpCriterion('[thunderstorms]&'
      '#39;, 1.8268921375274658,'
      #39'22,200'#39', '#39'40,500'#39', 22200, 40500, '
      '0.8'
      ','
      ''$0.56', 559074,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.64'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.56'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.52'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.53'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.47'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.58'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      '));'
      'criteria.push(new '
      'kpCriterion('\42thunderstorms'
      '\042', 1.8268921375274658,'
      #39'110,000'#39', '#39'165,000'#39', 110000, '
      '165000, 0.8'
      ','
      ''$0.56', 559074,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      '));'
      'criteria.push(new '
      'kpCriterion('lightning '
      'storm', 1.774579644203186,'
      #39'49,500'#39', '#39'90,500'#39', 49500, 90500, '
      '0.73333335'
      ','
      ''$0.54', 535666,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      ''''
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.97'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.98'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.86'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      '));'
      'criteria.push(new '
      'kpCriterion('[lightning '
      'storm]', 1.774579644203186,'
      #39'12,100'#39', '#39'22,200'#39', 12100, 22200, '
      '0.73333335'
      ','
      ''$0.54', 535666,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      ''''
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.85'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.67'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.65'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      '));'
      'criteria.push(new '
      'kpCriterion('\42lightning '
      'storm\042', '
      '1.774579644203186,'
      #39'33,100'#39', '#39'60,500'#39', 33100, 60500, '
      '0.73333335'
      ','
      ''$0.54', 535666,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '5'
      ','
      ''''
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.71'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.66'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.74'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      '));'
      'criteria.push(new '
      'kpCriterion('rain storm', '
      '1.7464053630828857,'
      #39'27,100'#39', '#39'49,500'#39', 27100, 49500, '
      '0.6666667'
      ','
      ''$0.53', 526334,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '0'
      ','
      ''''
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.55'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.74'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.89'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      '));'
      'criteria.push(new '
      'kpCriterion('[rain '
      'storm]', '
      '1.7464053630828857,'
      #39'5,400'#39', '#39'8,100'#39', 5400, 8100, '
      '0.6666667'
      ','
      ''$0.53', 526334,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '2'
      ','
      ''''
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.68'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.69'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.73'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.72'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.62'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.59'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.66'
      '));'
      'criteria.push(new '
      'kpCriterion('\42rain '
      'storm\042', '
      '1.7464053630828857,'
      #39'14,800'#39', '#39'27,100'#39', 14800, 27100, '
      '0.6666667'
      ','
      ''$0.53', 526334,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '0'
      ','
      ''''
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.87'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.78'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.79'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.61'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.92'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.82'
      '));'
      'criteria.push(new '
      'kpCriterion('lightning '
      'storms', '
      '1.6842896938323975,'
      #39'14,800'#39', '#39'27,100'#39', 14800, 27100, '
      '0.73333335'
      ','
      ''$0.42', 417108,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_BROAD'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.9'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.9'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.84'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.7'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.88'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.76'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.57'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.75'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.63'
      '));'
      'criteria.push(new '
      'kpCriterion('[lightning '
      'storms]', '
      '1.6842896938323975,'
      #39'3,600'#39', '#39'8,100'#39', 3600, 8100, '
      '0.73333335'
      ','
      ''$0.42', 417108,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_EXACT'
      ','
      '0'
      ')); var monthlyVariation = new '
      'Array();'
      'monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.8'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.86'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '1.0'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.99'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.83'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.85'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.78'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.77'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.6'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.91'
      ')); monthlyVariation.push(new '
      'kpMonthlyPopularity('
      '0.81'
      '));'
      'criteria.push(new '
      'kpCriterion('\42lightning '
      'storms\042', '
      '1.6842896938323975,'
      #39'12,100'#39', '#39'22,200'#39', 12100, 22200, '
      '0.73333335'
      ','
      ''$0.42', 417108,'
      ''1 - 3', 2'
      ','
      '0'
      ','
      '0'
      ','
      'monthlyVariation,'
      '4'
      ','
      ''''
      ','
      'kpView.MATCH_PHRASE'
      ','
      '0'
      ')); var monthlyVariation =

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伴我心暖 2024-08-31 04:47:50

运行时错误“TPerlRegEx.Compile() - 请首先在 RegEx 中指定正则表达式”意味着您在未设置 TPerlRegEx.RegEx 属性的情况下调用了 TPerlRegEx.Compile 或调用此方法的其他方法(例如 TPerlRegEx.Match)。您问题中的代码不会出现该错误。

您的文件 Unit2.pas 无法编译,并出现错误“字符串文字最多可以有 255 个元素”。这是 RegexBuddy 在生成 Delphi 代码时尚未考虑到的事情。 (下一个免费的次要更新将会。)如果您手动将字符串拆分为短于 255 个字符的片段(例如“longstring”变为“long”+“string”),则代码将运行。但它没有找到任何匹配项。

为了使您的代码找到匹配项,我让它从磁盘加载文件 googleresultstestdata.txt,而不是使用备忘录,以确保备忘录的自动换行不会在文本中添加任何换行符。我还从正则表达式中删除了 #13 的所有实例。您的文件 googleresultstestdata.txt 使用 UNIX 样式的换行符,仅与 \n 或 #10 匹配。 \r\n 或 #13#10 匹配 Windows 风格的换行符。

在 Delphi 字符串中,#13 代表 CR,#10 代表 LF。在正则表达式中使用文字换行符绝对没有问题。如果您在 RegexBuddy 中输入文字换行符,则 RegexBuddy 在 Delphi 中将其编码为 #13#10。如果您在 RegexBuddy 中键入 \r\n,则 RegexBuddy 在 Delphi 中将其编码为 '\r\n'。 PCRE(由 TPerlRegEx 内部使用)将 \r 和 \n 解释为 CR 和 LF。

您的正则表达式使用冗余捕获组。 (?(.*?)).*? 放入编号的捕获组中,并将其放入命名的捕获组“name”中。这样做没有意义。如果您想要命名组,只需使用 (?.*?)

这不会影响您的正则表达式匹配的内容,但会影响其性能。但更大的问题是所有这些 .*? 都可能导致灾难性回溯。这是否是一个问题取决于您将如何使用正则表达式。如果您仅在自己的数据上使用它并且不会造成问题,则可以保留它。但是,如果这要进入处理用户提供的数据的应用程序,那么您将需要一个正则表达式,如果它无法匹配用户的数据,它会更优雅地失败。

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PerlRegEx;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
    Regex: TPerlRegEx;
    GroupIndex: Integer;
  FS: TFileStream;
  S: UTF8String;
begin
  Regex := TPerlRegEx.Create(nil);
  Regex.RegEx := 'criteria\.push\(new kpCriterion\('(?P<keyword>(.*?))', (?P<number1>(.*?)),' +
                 #10'''(?P<localsearch>(.*?))'', ''(?P<globalsearch>(.*?))'', (?P<localsearchnum>(.*?)), (?P<globalsearchnum>(.*?)), (.*+)'#10','#10''\$(?P<price>(.*?))', (?P<number2>(.*?)),'#10''(?P<range>(.*?))', (?P<number3>(.*+))';
  Regex.Options := [preMultiLine];
  FS := TFileStream.Create('g:\temp\googleresultstestdata.txt', fmOpenRead);
  SetLength(S, FS.Size);
  FS.Read(S[1], Length(S));
  FS.Free;
  Regex.Subject := S;
  if Regex.Match then begin
    memo2.Lines.Add('Matches Found');
    repeat
      for GroupIndex := 0 to Regex.SubExpressionCount do begin
           memo2.lines.add( Regex.SubExpressions[GroupIndex]); //Add Results to memo
        // backreference text: Regex.SubExpressions[GroupIndex];
        // backreference start: Regex.SubExpressionOffsets[GroupIndex];
        // backreference length: Regex.SubExpressionLengths[GroupIndex];
      end;
    until not Regex.MatchAgain;
  end
  else
    memo2.Lines.Add('No-Matches Found');
end;

end.

The runtime error "TPerlRegEx.Compile() - Please specify a regular expression in RegEx first" means you called TPerlRegEx.Compile or another method that calls this (such as TPerlRegEx.Match) without setting the TPerlRegEx.RegEx property. You can't get that error with the code in your question.

Your file Unit2.pas fails to compile with an error "string literals may have at most 255 elements". This is something that RegexBuddy does not yet take into account when generating Delphi code. (The next free minor update will.) If you manually split up the string into pieces shorter than 255 characters (e.g. 'longstring' becomes 'long' + 'string') then the code runs. It does not find any matches though.

To make your code find matches, I made it load your file googleresultstestdata.txt from disk instead of using the memo to make sure that the memo's word wrapping does not add any line breaks to the text. I also removed all instances of #13 from the regex. Your file googleresultstestdata.txt uses UNIX-style line breaks which are matched with \n or #10 only. \r\n or #13#10 matches Windows-style line breaks.

In Delphi strings, #13 represents CR and #10 represents LF. There is absolutely no problem with using literal line breaks in regular expressions. If you type a literal line break into RegexBuddy then RegexBuddy codes that as #13#10 in Delphi. If you type \r\n into RegexBuddy then RegexBuddy codes that as '\r\n' in Delphi. PCRE (used internally by TPerlRegEx) interprets \r and \n as CR and LF.

Your regex uses redundant capturing groups. (?<name>(.*?)) puts the .*? inside a numbered capturing group and that inside a named capturng group "name". There's no point in doing that. If you want the named group, just use (?<name>.*?)

This does not affect what your regex matches, but will affect its performance. A bigger problem though is that all those .*? can result in catastrophic backtracking. Whether this is a concern depends on how you'll be using the regex. If you're only using it on your own data and it doesn't cause problems, you can leave it. But if this is going into an application that handles user-provided data, then you'll need a regex that fails more gracefully if it can't match the user's data.

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, PerlRegEx;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
    Regex: TPerlRegEx;
    GroupIndex: Integer;
  FS: TFileStream;
  S: UTF8String;
begin
  Regex := TPerlRegEx.Create(nil);
  Regex.RegEx := 'criteria\.push\(new kpCriterion\('(?P<keyword>(.*?))', (?P<number1>(.*?)),' +
                 #10'''(?P<localsearch>(.*?))'', ''(?P<globalsearch>(.*?))'', (?P<localsearchnum>(.*?)), (?P<globalsearchnum>(.*?)), (.*+)'#10','#10''\$(?P<price>(.*?))', (?P<number2>(.*?)),'#10''(?P<range>(.*?))', (?P<number3>(.*+))';
  Regex.Options := [preMultiLine];
  FS := TFileStream.Create('g:\temp\googleresultstestdata.txt', fmOpenRead);
  SetLength(S, FS.Size);
  FS.Read(S[1], Length(S));
  FS.Free;
  Regex.Subject := S;
  if Regex.Match then begin
    memo2.Lines.Add('Matches Found');
    repeat
      for GroupIndex := 0 to Regex.SubExpressionCount do begin
           memo2.lines.add( Regex.SubExpressions[GroupIndex]); //Add Results to memo
        // backreference text: Regex.SubExpressions[GroupIndex];
        // backreference start: Regex.SubExpressionOffsets[GroupIndex];
        // backreference length: Regex.SubExpressionLengths[GroupIndex];
      end;
    until not Regex.MatchAgain;
  end
  else
    memo2.Lines.Add('No-Matches Found');
end;

end.
尾戒 2024-08-31 04:47:50

由于不熟悉 Delphi,我无法理解您的 Delphi 风格的正则表达式,因此我回到 RegexBuddy 重新创建它。这是我的原件:

criteria\.push\(new\s+kpCriterion\(
'(?P<关键字>.*?)',
\s*(?P.*?),
\s*'(?P.*?)',
\s*'(?P.*?)',
\s*(?P.*?),
\s*(?P.*?),
[^,]*,
\s*'\$(?P<价格>.*?)',
\s*(?P.*?),
\s*'(?P.*?)',
\s*(?P.*$)

...这是 RegexBuddy 生成的 Delphi 字符串版本:

'criteria\.push\(new\s+kpCriterion\(< /代码>
'(?P<关键字>.*?)',
\s*(?P.*?),
\s*''(?P.*?)'',
\s*''(?P.*?)'',
\s*(?P.*?),
\s*(?P.*?),
[^,]*,
\s*'\$(?P<价格>.*?)',
\s*(?P.*?),
\s*'(?P.*?)',
\s*(?P.*$)'

显然,为了可读性,我将它们分开。要重新组装它们,只需删除换行符即可;正则表达式中不应有任何类型的文字空白。

我在你的正则表达式中看到的最大问题是:'#13#10'。我不熟悉 Delphi 语法,但这是我能看到的唯一可能导致正则表达式无法编译的东西。 RegexBuddy 似乎认为 \r\n 可以工作,但我通过使用 \s* 绕过了这个问题;无论如何,分隔字段的是逗号,而不是换行符。

我还去掉了命名组内多余的括号;除非 TPerlRegEx 与其他风格完全不同,否则它们只是混乱。这个正则表达式对你有用吗?

Not being acquainted with Delphi, I couldn't make sense of your Delphi-flavored regex, so I went back to RegexBuddy to recreate it. Here's my original:

criteria\.push\(new\s+kpCriterion\(
'(?P<keyword>.*?)',
\s*(?P<number1>.*?),
\s*'(?P<localsearch>.*?)',
\s*'(?P<globalsearch>.*?)',
\s*(?P<localsearchnum>.*?),
\s*(?P<globalsearchnum>.*?),
[^,]*,
\s*'\$(?P<price>.*?)',
\s*(?P<number2>.*?),
\s*'(?P<range>.*?)',
\s*(?P<number3>.*$)

...and here's Delphi-string version RegexBuddy generates:

'criteria\.push\(new\s+kpCriterion\(
'(?P<keyword>.*?)',
\s*(?P<number1>.*?),
\s*''(?P<localsearch>.*?)'',
\s*''(?P<globalsearch>.*?)'',
\s*(?P<localsearchnum>.*?),
\s*(?P<globalsearchnum>.*?),
[^,]*,
\s*'\$(?P<price>.*?)',
\s*(?P<number2>.*?),
\s*'(?P<range>.*?)',
\s*(?P<number3>.*$)'

I split them up for readability, obviously. To reassemble them, just remove the line breaks; there should be no literal whitespace of any kind in the regex.

The biggest problem I saw with your regex was this bit: '#13#10'. I'm not familiar with Delphi syntax, but that's the only thing I can see that might make the regex fail to compile. RegexBuddy seems to think \r\n will work, but I skirted the issue by using \s* instead; it's the commas that delimit the fields anyway, not the line breaks.

I also got rid of the redundant parentheses inside the named groups; unless TPerlRegEx is radically different from other flavors, they were just clutter. Does this regex work for you?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文