⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.pas

📁 用delphi写得正则表达式工具
💻 PAS
字号:
//---------------------------------------------------
//www.zq1863.com
//---------------------------------------------------
unit frmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, Menus;



type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Splitter1: TSplitter;
    Panel3: TPanel;
    Memo1: TMemo;
    lvRet: TListView;
    Panel5: TPanel;
    Panel6: TPanel;
    Label1: TLabel;
    txtExpression: TEdit;
    btnExec: TButton;
    Memo2: TMemo;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    CheckBox9: TCheckBox;
    CheckBox12: TCheckBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox10: TCheckBox;
    CheckBox11: TCheckBox;
    Label2: TLabel;
    txtReplace: TEdit;
    btnExpReplace: TButton;
    pm_lvRet: TPopupMenu;
    N1: TMenuItem;
    Panel7: TPanel;
    Panel9: TPanel;
    chkModifierS: TCheckBox;
    chkModifierG: TCheckBox;
    chkModifierR: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure btnExecClick(Sender: TObject);
    procedure btnTrackMobileClick(Sender: TObject);
    procedure lvRetChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    procedure FormShow(Sender: TObject);
    procedure btnExpReplaceClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
    untClip,
	untTools,
    untListView,
    untDType,
	untString,
    RegExpr;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    RegExpr: TRegExpr;
begin
{
    if chkDemo.Checked=true then
    begin
        Memo1.Clear;
        Memo1.Lines.Add('"ssf12d好3422222222,342?" ');
        Memo1.Lines.Add('"大富翁论坛" ');
        Memo1.Lines.Add('"喹,23    ?" ');
        Memo1.Lines.Add('上面的都要搜索出来,下面的则不要出来 ');
        Memo1.Lines.Add('"342kkkkkkkkkhoooo" ');
    end;

    Memo2.Clear;
    RegExpr:= TRegExpr.Create;
    RegExpr.Expression:= '([\xB0-\xF7][\xA1-\xFE])+ '; 
    if RegExpr.Exec(Memo1.Text) then 
    repeat 
        Memo2.Lines.Add(RegExpr.Match[1]);
    until not RegExpr.ExecNext; 
    RegExpr.Free;
}
end;

procedure TForm1.btnExecClick(Sender: TObject);
var
    i, iIndex: integer;
	RegExpr: TRegExpr;
    NewColumn: TListColumn;
    ListItem: TListItem;
    strBuffer, istr: string;
begin
    if Memo1.Text='' then exit;
    if txtExpression.Text='' then exit;

    lvRet.Columns.Clear;
    lvRet.Items.Clear;
    
    RegExpr:= TRegExpr.Create;
    RegExpr.ModifierS:= chkModifierS.checked;
    RegExpr.ModifierG:= chkModifierG.checked;
    RegExpr.ModifierR:= chkModifierR.checked;
    RegExpr.Expression:= txtExpression.Text;

	try
		RegExpr.Expression := txtExpression.Text;

        //strBuffer:= copy(Memo1.Text, 1, strtoint(txtMax.Text)*1024);

		if RegExpr.Exec (Memo1.Text) then
        begin
            NewColumn := lvRet.Columns.Add;
            NewColumn.Caption := '序号';

            //生成列标题
            for i:= 0 to RegExpr.SubExprMatchCount do
            begin
                NewColumn := lvRet.Columns.Add;
                NewColumn.Caption := '匹配子项'+Format('%2d', [i]);;
            end;

            //生成列数据
            REPEAT
                iIndex:= iIndex+1;
                caption:= '匹配: '+inttostr(iIndex);
                Application.ProcessMessages;

                //具体情况
                ListItem:= lvRet.Items.Add;
                ListItem.Caption := inttostr(iIndex);

                for i:= 0 to RegExpr.SubExprMatchCount do
                begin
                    ListItem.SubItems.Add(RegExpr.Match[i]);
                end;

                //if iIndex>strtoint(Edit1.Text) then break;
            UNTIL not RegExpr.ExecNext;
        end;
	finally
		RegExpr.Free;
 	end;
end;

//提取手机号码
procedure TForm1.btnTrackMobileClick(Sender: TObject);
var
	i: integer;
	OutItems: TStrings;
    NewColumn: TListColumn;
    ListItem: TListItem;
begin
{
    lvRet.Columns.Clear;
    lvRet.Items.Clear;
	OutItems:= TStringList.Create;

	TrackMobile(Memo1.Text, strtoint(txtMobileLen.Text), OutItems);

	NewColumn := lvRet.Columns.Add;
	NewColumn.Caption := '序号';
	NewColumn := lvRet.Columns.Add;
	NewColumn.Caption := '号码';            
	NewColumn := lvRet.Columns.Add;
	NewColumn.Caption := '起始位置';
	NewColumn := lvRet.Columns.Add;
	NewColumn.Caption := '长度';    

    for i:= 0 to OutItems.Count-1 do
    begin
    	//显示匹配索引
    	ListItem:= lvRet.Items.Add;
    	ListItem.Caption := inttostr(i+1);
    	
    	//显示号码
    	ListItem.SubItems.Add(GetStringFieldValue('~', OutItems.Strings[i], 0));
    	
    	//显示起始位置
    	ListItem.SubItems.Add(GetStringFieldValue('~', OutItems.Strings[i], 1));
    	
    	//显示长度
    	ListItem.SubItems.Add(GetStringFieldValue('~', OutItems.Strings[i], 2));

    	//显示匹配串
    	ListItem.SubItems.Add(GetStringFieldValue('~', OutItems.Strings[i], 3));
    end;

    OutItems.Destroy;
}
end;

procedure TForm1.lvRetChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
var
	i: integer;
    strText: string;
begin
	//txtExpression.Text:='';
    Memo2.Clear;
    strText:= '';
    for i:= 0 to Item.SubItems.Count-1 do
    begin
        //txtExpression.Text:= txtExpression.Text+Item.SubItems.Strings[i]+'~';
        //strText:= strText+Item.SubItems.Strings[i]+'~';
        Memo2.Lines.Add('【'+FormatInt(i, 4)+'】'+Item.SubItems.Strings[i]);
    end;
    if Item.SubItems.Count>0 then
    	//Memo2.Lines.Add(Item.SubItems.Strings[0]);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
	//Memo1.Clear;
    //Memo1.Lines.LoadFromFile(GetAppPath()+'DATA\TEST.TXT');
end;

procedure TForm1.btnExpReplaceClick(Sender: TObject);
var
    RegExpr: TRegExpr;
begin
    RegExpr:= TRegExpr.Create;
    RegExpr.ModifierS:= chkModifierS.checked;
    RegExpr.ModifierG:= chkModifierG.checked;
    RegExpr.ModifierR:= chkModifierR.checked;

    RegExpr.Expression:= txtExpression.Text;
    Memo1.Text:= RegExpr.Replace(Memo1.Text, txtReplace.Text, true);
end;

procedure TForm1.N1Click(Sender: TObject);
var
    i: integer;
    strValue: string;
    Lines: TStringList;
begin
    if lvRet.Items.Count<1 then exit;

    strValue:= GetAppPath()+'LV.TXT';
    SaveListView(lvRet, strValue);
    strValue:= TextFromFile(strValue);
    SetTextInClipBoard(strValue);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -