[英]Delphi - TPerlRegEx / RegExBuddy Problem
我遇到了RegEx和Delphi 2k9(Win32)的问题。 我得到以下错误:$ 7C812AFB的第一次机会异常。 消息'TPerlRegEx.Compile()的异常类异常 - 请在RegEx中指定正则表达式'。 我从网站上获得了最新版本的TPerlRegEx。 使用其defualt设置(使用DLL)
我包括演示源代码。 它使用RegExBuddy生成的代码,最新版本。
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
谢谢你的帮助
-Brad
数据来自谷歌外部关键字工具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\('(?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 =
运行时错误“TPerlRegEx.Compile() - 请首先在RegEx中指定正则表达式”意味着您调用了TPerlRegEx.Compile或其他调用此方法的方法(例如TPerlRegEx.Match)而未设置TPerlRegEx.RegEx属性。 您无法使用问题中的代码获得该错误。
你的文件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
。 如果你输入\\r\\n
到RegexBuddy,那么RegexBuddy在Delphi中将其编码为'\\r\\n'
。 PCRE(由TPerlRegEx内部使用)将\\ r和\\ n解释为CR和LF。
您的正则表达式使用冗余捕获组。 (?<name>(.*?))
放入.*?
在编号的捕获组内,在命名的捕获组“名称”内。 这样做没有意义。 如果你想要命名组,只需使用(?<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.
不熟悉Delphi,我无法理解你的Delphi风格的正则表达式,所以我回到RegexBuddy来重新创建它。 这是我原来的:
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>.*$)
...这里是Delphi-string版本RegexBuddy生成的:
'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>.*$)'
为了便于阅读,我将它们分开了。 要重新组装它们,只需删除换行符; 在正则表达式中应该没有任何类型的文字空格。
我用你的正则表达式看到的最大问题是: '#13#10'
。 我不熟悉Delphi语法,但这是我能看到的唯一可能使正则表达式无法编译的东西。 RegexBuddy似乎认为\\r\\n
会起作用,但我通过使用\\s*
代替了这个问题; 无论如何都是用逗号分隔字段的逗号,而不是换行符。
我也摆脱了命名组内的冗余括号; 除非TPerlRegEx与其他口味完全不同,否则它们只是杂乱无章。 这个正则表达式适合你吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.