簡體   English   中英

為什么TPerlRegEx的MatchAgain方法不起作用

[英]Why MatchAgain method of TPerlRegEx doesn't works

我想使用RegEX從以下文本中提取SAAMSAAMI (我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM