[英]Why MatchAgain method of TPerlRegEx doesn't works
我想使用RegEX
從以下文本中提取SAAM
和SAAMI
(我在Delphi XE4和XE5中進行編碼):
RegEx = 'Name:\s?(.*),Family:\s?(.*)';
例如我有這個文本:
Name: SAAM
Family: SAAMI
我寫了這個代碼,並使用MatchAgain
的方法TPerlRegEx
用於匹配兩段正則表達式( 'Name:\\s?(.*)'
和'Family:\\s?(.*)'
)。
...
var
RX: TPerlRegEx;
const
RegEx = 'Name:\s?(.*),Family:\s?(.*)';
begin
RX := TPerlRegEx.Create;
try
RX.RegEx := RegEx;
RX.Subject := mmo1.Text;// The mmo1.text value is "Name: SAAM and Family: SAAMI"
if RX.Match then
begin
repeat
ShowMessage('Name is :' + RX.Groups[1]);
ShowMessage('Family is :' + RX.Groups[2]);
until not RX.MatchAgain;
end;
finally
RX.Free;
end;
...
為什么此代碼不起作用?
我將代碼更改為此,並且它對我來說正常工作(幾乎:-))。
示例文字:
Junk text :-)
Junk text :-)
Junk text :-)
Name: SAAM
Junk text :-)
Junk text :-)
Junk text :-)
Junk text :-)
Junk text :-)
Family: SAAMI
Junk text :-)
Junk text :-)
Junk text :-)
新代碼:
var
RX: TPerlRegEx;
i: Integer;
const
RegEx = 'Name:\s?(.*)|Family:\s?(.*)';
begin
i := 1;
RX := TPerlRegEx.Create;
try
RX.RegEx := RegEx;
RX.Subject := mmo1.Text;
if RX.Match then
begin
repeat
case i of
1:
ShowMessage('Name is: ' + RX.Groups[i]);
2:
ShowMessage('Family is: ' + RX.Groups[i]);
end;
Inc(i);
until not RX.MatchAgain;
end;
finally
RX.Free;
end;
結果:
Name is: SAAM
Family is: SAAMI
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.