[英]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.