久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Delphi正則表達式使用方法(TPerlRegEx)

 逸隨風(fēng)清 2018-10-08

目前主流的delphi下的正則表達式,應(yīng)該是 PerlRegEx ,。  

    官方網(wǎng)站: http://www./delphi.html
    直接下載: http://www./download/TPerlRegEx.zip   

安裝方法(我使用的delphi版本是 delphi2007):

1、先把解壓的 TPerlRegEx 文件夾放在 Delphi 的根目錄下的 Imports 目錄中,。

2、目前最新 For Win32 的版本是可以在 Delphi7,,Delphi 2006,,Delphi 2007,Delphi 2009 下使用,。

     我用的是2007,,于是就打開了PerlRegExD2007.dpk ,在 Project Manager 窗口中的 PerlRegExD2007.bpl 上點擊右鍵,,執(zhí)行 Install,。這時           

     在 Tool Palette 的列表中已經(jīng)有了 TPerlRegEx,在 JGsoft 組,。

3,、Tools -> Options -> Environment Options -> Delphi Options -> Library-Win32 -> Library path ->

    添加路徑:$(BDS)\Imports\TPerlRegEx (注:就是剛才放置的路徑)。

4,、打開delphi根目錄下 Imports\TPerlRegEx\pcre ,,把 pcre3.dll 文件復(fù)制到 C:\WINDOWS\system32 文件夾下,這個文件夾里是windows系統(tǒng)存放 dll 文

    件的大本營,。如果不復(fù)制pcre3.dll,,在應(yīng)用 TPerlRegEx 正則的時候,系統(tǒng)提示出錯,。

5,、用delphi打開 Imports\TPerlRegEx 目錄下的 pcre.pas 文件,找到 //{$DEFINE PCRE_STATICLINK} ,把之前的注釋 // 刪除,;找

    到 {$DEFINE PCRE_LINKDLL} ,把它注釋掉,,即改為 //{$DEFINE PCRE_LINKDLL} ,。注意:這點非常重要,如果不這樣改的話,,在軟件開發(fā)完成后,,分

    發(fā)到其他電腦上的時候,軟件就會提示“缺少pcre3.dll錯誤”,。這樣修改的原因,,是把正則直接封包到 exe 文件里,而不需要鏈接 pcre3.dll 了,;封包進 exe,,付

    出的代價是軟件增大了 100KB 左右的大小,當(dāng)然比起必須攜帶 pcre3.dll來說,,這是有意義的付出,。

6、可以使用了! 直接 uses PerlRegEx 或從 Tool Palette 添加都可以,。 TPerlRegEx 安裝設(shè)置完成后,,就可以舒心地使用了,一些簡單的使用方法如下:

 

//查找是否存在
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);
  reg.Subject := 'CodeGear Delphi 2007 for Win32';
  reg.RegEx   := '\d';
  if reg.Match then
    ShowMessage('找到了')
  else
    ShowMessage('沒找到');
  FreeAndNil(reg);
end;
//替換一般字符串
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := '我愛DELPHI, 但Delphi不愛我!';
reg.RegEx   := 'Delphi';
reg.Replacement := '◆';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: 我愛DELPHI, 但◆不愛我!          
FreeAndNil(reg);
end;
//分別顯示找到的每一個和總數(shù)
var
  reg: TPerlRegEx;
  num: Integer; //用 num 來計數(shù)
begin
  reg := TPerlRegEx.Create(nil);  reg.Subject := 'CodeGear Delphi 2007 for Win32';
  reg.RegEx   := '\d';  num := 0;
  while reg.MatchAgain do  //MatchAgain 是下一個
  begin
    ShowMessage(reg.MatchedExpression); //將分別顯示: 2 0 0 7 3 2
    Inc(num);
  end;
    ShowMessage(IntToStr(num)); //6  FreeAndNil(reg);
end;
//目標字符串的位置與長度
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);  reg.Subject := 'CodeGear Delphi 2007 for Win32';
  reg.RegEx   := 'Delphi';  while reg.MatchAgain do  //很明顯: 本例只能找到一個結(jié)果
  begin
    ShowMessage(reg.MatchedExpression); //找到的字符串: Delphi
    ShowMessage(IntToStr(reg.MatchedExpressionOffset)); //它所在的位置: 10
    ShowMessage(IntToStr(reg.MatchedExpressionLength)); //它的長度: 6
  end;  FreeAndNil(reg);
end;

// Matchedexpression_r 與Subexpression_rs[0]
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.Subject := 'CodeGear Delphi 2007';
reg.RegEx   := 'Delphi';

while reg.MatchAgain do
begin
   ShowMessage(reg.Matchedexpression_r); //Delphi; 這是匹配到的內(nèi)容
   ShowMessage(reg.Subexpression_rs[0]); //Delphi; 也可以這樣顯示匹配到的內(nèi)容
end;
{
Subexpression_rs 是一個數(shù)組:
Subexpression_rs[1] 儲存第 1 個表達式匹配的內(nèi)容;
Subexpression_rs[2] 儲存第 2 個表達式匹配的內(nèi)容;
Subexpression_rs[n] 儲存第 n 個表達式匹配的內(nèi)容;

Subexpression_rs[0] 儲存整個表達式匹配的內(nèi)容;

Matchedexpression_r 表示的不過是 Subexpression_rs[0].
}

FreeAndNil(reg);
end;

//提取子表達式匹配到的內(nèi)容
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.Subject := 'abc A1111 BB222 CCC33 DDDD4';
reg.RegEx   :='\b([A-D]+)([1-4]+)\b'; //這個表達式有兩個子表達式構(gòu)成

while reg.MatchAgain do
begin
   ShowMessage(reg.Subexpression_rs[0]); //將分別顯示: A1111 BB222 CCC33DDDD4
   ShowMessage(reg.Subexpression_rs[1]); //將分別顯示: A BB CCC DDDD
   ShowMessage(reg.Subexpression_rs[2]); //將分別顯示: 1111 222 33 4

   {另外:
 
    reg.Subexpression_rCount     是子表達式的個數(shù);
 
    reg.Subexpression_rLengths[n] 是第 n 個表達式返回的字符串的長度;
 
    reg.Subexpression_rOffsets[n] 是第 n 個表達式返回的字符串在源字符串中的位置
 
   }
end;

FreeAndNil(reg);
end;

//子表達式不能超過 MAX_SUBexpression_rS = 99 個, MAX_SUBexpression_rS 是TPerlRegEx 的內(nèi)置常數(shù).

//設(shè)定搜索范圍: Start,、Stop
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.Subject := 'ababab';
reg.RegEx   := 'ab';
reg.Replacement := '◆';

reg.Start := 1;
reg.Stop := 2;
while reg.MatchAgain do
begin
   reg.Replace;
end;
ShowMessage(reg.Subject); //返回: ◆abab


reg.Subject := 'ababab';
reg.Start := 3;
reg.Stop := 4;
while reg.MatchAgain do
begin
   reg.Replace;
end;
ShowMessage(reg.Subject); //返回: ab◆ab


reg.Subject := 'ababab';
reg.Start := 5;
reg.Stop := 6;
while reg.MatchAgain do
begin
   reg.Replace;
end;
ShowMessage(reg.Subject); //返回: abab◆

FreeAndNil(reg);
end;

// Replace
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.RegEx   := 'ab';
reg.Replacement := '◆';

reg.Subject := 'ababab';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: ◆◆◆


reg.Subject := 'ababab';
//下面四行程序, 相當(dāng)于 reg.ReplaceAll;
while reg.MatchAgain do
begin
   reg.Replace;
end;

ShowMessage(reg.Subject); //返回: ◆◆◆

FreeAndNil(reg);
end;
{
ReplaceAll 函數(shù)返回的是 Boolean;
Replace 函數(shù)返回的是 Replacement 的值, 當(dāng)然是不能賦值的, 它僅僅是返回值.
}

// Compile,、Study
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.RegEx   := 'ab';
reg.Options := [preCaseLess];
reg.Compile; {編譯表達式}
reg.Study; {Study 方法會檢查是否編譯, 如果沒有編譯則執(zhí)行 Compile}

reg.Replacement := '◆';
reg.Subject := 'abAbaB';

reg.ReplaceAll;
ShowMessage(reg.Subject); {返回: ◆◆◆}

FreeAndNil(reg);
end;

{
編譯表達式, 會加快執(zhí)行速度、降低啟動速度;
如果表達式比較復(fù)雜而又多次執(zhí)行, 應(yīng)該先編譯;
編譯內(nèi)容包括表達式選項.
}

// EscapeRegExChars 函數(shù)可以自動為特殊字符加轉(zhuǎn)義符號 \
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);

reg.Subject := 'C++Builer';
reg.RegEx   :=reg.EscapeRegExChars('C+') + '{2}'; {相當(dāng)于 'C\+{2}'}
reg.Replacement := '◆';
reg.ReplaceAll;

ShowMessage(reg.Subject); {返回: ◆Builer}

FreeAndNil(reg);
end;

//字符串分割: Split
var
reg: TPerlRegEx;
List: TStrings;
begin
List := TStringList.Create;
reg := TPerlRegEx.Create(nil);

reg.Subject := 'aaa,bbb,ccc,ddd';
reg.RegEx   := ',';{這里可是運行相當(dāng)復(fù)雜的分割符啊}

reg.Split(List,MaxInt); {第一個參數(shù)讀入的是 Subject; 第二個參數(shù)是分成多少份}
{ 輸入一個最大整數(shù), 表示能分多少就分多少}

ShowMessage(List.Text);
{返回:
 
   aaa
 
   bbb
 
   ccc
 
   ddd
}

FreeAndNil(reg);
List.Free;
end;

DEMO:
#!/usr/bin/perl
 
use strict;
use warnings;
 
my @array;
open(my $fh, "<", "file3")
  or die "Failed to open file: $!\n";
while(<$fh>) {
    chomp;
    push @array, $_;
}
close $fh;
 
foreach my $line(@array)
{
    if($line =~ /.*([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]).*logged in\((.*)\).*/gi)
    {
       print $1,",", $2,"\n";
    }
 
}

--------------------- 本文來自 my98800 的CSDN 博客 ,,全文地址請點擊:https://blog.csdn.net/my98800/article/details/53095612?utm_source=copy 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章