首页 > 其他分享 >正则表达式的使用方法

正则表达式的使用方法

时间:2023-05-10 16:24:04浏览次数:40  
标签:begin 匹配 正则表达式 TRegEx matches match 使用 方法 Match

引用单元:

uses
  System.RegularExpressions

1、TRegEx.Match方法

Match()方法总是获取满足条件的第一个匹配,而不关心满足条件的匹配有多少个。

Match()方法都回一个Match对象,其中包含了匹配的各种细节.

Match()方法的取值方法

var

  m:TMatch;

begin

  m := TRegEx.Match('a1a2','\d');

  showmessage(m.groups.item[0].value);  //只能是0啊,因为它只取第一个匹配值.反过来,如果它一个都没有匹配到的话,连0都没了

end;

所以,一般地,当我们确定只有一个符合条件的匹配或只需要第一个符合条件的匹配时,可以使用Match()。

你可以使用TMatch的NextMatch方法获取下一个匹配的字符串:
  m:= m.NextMatch;
可以使用TMatch的Groups属性获取与分组的正则表达式匹配的字符串。

var
match: TMatch;
group: TGroup;
begin
match := TRegEx.Match('2012/5/14', '(\d+)/(\d+)/(\d)');
ShowMessage(IntToStr(match.Groups.Count)); //=> 4

for group in match.Groups do
begin
ShowMessage(Format('%s (%d, %d)',
[group.Value, group.Index, group.Length]));
end;
(* 結果
2012/5/1 (1, 8)
2012 (1, 4)
5 (6, 1)
1 (8, 1)
*)

2、TRegEx.IsMatch方法

  isMatch()方法用于判断是否能匹配到符合条件的成员,返回一个Boolean值.

  TRegEx.Match('aAA','\d');    //返回false;

  TRegEx.Match('aAA','\w');    //返回true;

3、TRegEx.Matches方法获取与正则表达式匹配的所有字符串.

  Matches()方法可以得到MathCollection对象的一个集合。这个集合类中包含每一次正则表达式匹配的Match对象。

  TRegEx.Match的声明是:

    M:TMatch;

  而TRegEx.Matches声明的是:

    MC:TMatchCollection;

  一般,当我们需要获取所有符合条件的匹配结果时,可以使用Matches()。

procedure TForm2.Button1Click(Sender: TObject);
var
mc: TMatchCollection;
pattern, str: string;
i: Integer;
begin
pattern := Edit2.Text; //正则规则
str := edit1.Text;
if TRegEx.IsMatch(str, pattern) then
begin
if CheckBox1.Checked then
mc := TRegEx.Matches (str, pattern,[roMultiLine]) //区分大小写
else
mc := TRegEx.Matches (str, pattern,[roIgnoreCase]); //默认忽略大小写,所以这里可以省略第三参数
Memo1.Clear;
for i := 0 to mc.Count - 1 do
begin
Memo1.Lines.Add(mc.Item[i].Value);
end;
end;
end;

var
match: TMatch;
matches: TMatchCollection;
begin
matches := TRegEx.Matches('Delphi XE', '[A-Z]+');
ShowMessage(IntToStr(matches.Count));

match := matches.Item[0];
ShowMessage(
Format('%s (%d, %d)',
[match.Value, match.Index, match.Length])); //=> D (1, 1)

match := matches.Item[1];
ShowMessage(
Format('%s (%d, %d)',
[match.Value, match.Index, match.Length])); //=> XE (8, 2)
Matches方法支持in do。

var
regex: TRegEx;
match: TMatch;
matches: TMatchCollection;
begin
regex := TRegEx.Create('[A-Z]+');
matches := regex.Matches('Delphi XE');
ShowMessage(IntToStr(matches.Count));

for match in matches do
ShowMessage(
Format('%s (%d, %d)',
[match.Value, match.Index, match.Length]));

4.TRegEx.Replace方法替换 与正则表达式匹配的字符串
s := TRegEx.Replace('Delphi XE', '[A-Z]', '_');  //=> _elphi __
 5.TRegEx.Split拆分方法 拆分字符串

var
splits: TArray<string>;
s: string;
begin
splits := TRegEx.Split('Delphi C++Builder/RadPHP', '[ /]');
for s in splits do
Memo1.Lines.Add(s);

6.TRegEx.Escape转义方法转义 特殊字符

var
  s: string;
begin
  s := TRegEx.Escape('C++');
  ShowMessage(s); //=> C\+\+
验证正则表达式语法
如果在构造函数参数中指定了roCompiled,则将编译正则表达式。 如果正则表达式有问题,则引发异常。
try
  TRegEx.Create(Edit1.Text, [roCompiled]);
except on E: Exception do
  ShowMessage(E.Message);
end;

标签:begin,匹配,正则表达式,TRegEx,matches,match,使用,方法,Match
From: https://www.cnblogs.com/lucken2000/p/17388311.html

相关文章

  • 基于华为云图引擎GES,使用Cypher子查询进行图探索
    摘要:本文以华为云图引擎GES为例,来介绍如何使用图查询语言Cypher表达一些需要做数据局部遍历的场景。本文分享自华为云社区《使用Cypher子查询进行图探索--以华为云图引擎GES为例》,作者:蜉蝣与海。在图数据库/图计算领域,很多查询可以使用图查询语言Cypher、Gremlin......
  • 万字长文详解如何使用Swift提高代码质量
    前言京喜APP最早在2019年引入了Swift,使用Swift完成了第一个订单模块的开发。之后一年多我们持续在团队/公司内部推广和普及Swift,目前Swift已经支撑了70%+以上的业务。通过使用Swift提高了团队内同学的开发效率,同时也带来了质量的提升,目前来自Swift的Crash的占比不到1%。在这过程......
  • 如何合理使用叉车车队管理系统
    叉车是一种广泛应用于现代物流和制造行业的物料搬运工具。随着工业自动化水平的不断提高,越来越多的企业开始使用叉车车队管理系统。但是,如何合理使用叉车车队管理系统仍然是一个需要讨论的问题。首先,合理使用叉车车队管理系统需要明确系统的功能和操作方法。叉车车队管理系统主要......
  • AntDesign Blaozr标签页ReuseTabs的使用以及授权失败的坑
    123<Authorized><ReuseTabsDraggableSize="TabSize.Small"/></Authorized><NotAuthorized>@{NavigationManager.NavigateTo("......
  • ES-License 长期免费试用方法
    目录1、准备工作a.部署esb.部署kibana2、修改服务器临时时间a.查看服务器当前时间b.修改服务器临时时间3、登录kibana设置试用30天4、改回当前时间点5、验证1、准备工作a.部署es#启动服务b.部署kibana#启动服务#注:暂时不要点击免费试用30天2、修改服务器临时......
  • 无需代码绘制人工神经网络ANN模型结构图的方法
      本文介绍几种基于在线网页或软件的、不用代码的神经网络模型结构可视化绘图方法。  之前向大家介绍了一种基于Python第三方ann_visualizer模块的神经网络结构可视化方法,大家可以直接点击文章Python绘制神经网络模型图进行查看;这一方法可以对Dense隐藏层以及MaxPooling层、D......
  • 在WSL中使用code .启动VSCode失败解决方法
    按照windows的官网教程https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-vscode安装VScode之后,在wsl终端输入code.显示指令不存在解决办法:通过 vim~/.bashrc 打开.bashrc文件,添加:exportPATH="$PATH:/mnt/c/Users/XXX/AppData/Local/Programs/MicrosoftVS......
  • matlab绘图中set函数的使用汇总
    Matlab绘图中set函数使用汇总%设置标题字体大小,字型set(get(gca,'title'),'FontSize',10,'FontName','宋体');%设置X坐标标题字体大小,字型set(get(gca,'XLabel'),'FontSize',10,'FontName','TimesNewRoman');%设......
  • spring boot中文件下载方法
     1、返回文件作为响应体,使用ResponseEntity类:@GetMapping("/downloadFile")publicResponseEntity<byte[]>downloadFile()throwsIOException{//读取文件内容到字节数组byte[]fileContent=Files.readAllBytes(Paths.get("path/to/file.txt"));......
  • 如何使用ChatGPT提高数据库效率520倍
    在过去的几个月里,随着ChatGPT、Midjourney、StableDiffusion等国外产品的快速迭代,以及国内百度、阿里、飞书、网易等大厂发布的大模型,一些设计、研发、自媒体从业者开始感到自危,仿佛他们的工作在AI的洪流中瞬间会被取代。那人人都能做的产品经理(bushi),在这次的AI革命中能做什么?我......