马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
起主要有一个观念:正则表达式一个语句不是完全通用的!它的举动还会受到具体编程语言或工具中正则表达式引擎实现的影响。差别的编程语言或工具大概会有渺小的差别,这些差别大概会影响正则表达式的匹配结果。
Delphi XE:- procedure TFrmMain.ExtractALL(const aGuiZhe, AInputString: string);
- // uses RegularExpressions
- // 整文全匹
- var
- regex: TRegEx;
- match: TMatch;
- matches: TMatchCollection;
- options: TRegExOptions;
- begin
- options := [roIgnoreCase, roMultiLine, roExplicitCapture];
- regex := TRegEx.Create(aGuiZhe, options);
- matches := regex.matches(AInputString);
- // 遍历匹配项集合
- for match in matches do
- Memo2.Lines.Add(match.Value);
- end;
- procedure TFrmMain.ExtractFirst(const aGuiZhe, AInputString: string);
- // uses RegularExpressions
- // 仅匹第一个捕获组
- var
- regex: TRegEx;
- match: TMatch;
- options: TRegExOptions;
- begin
- // roExplicitCapture 让捕获组失效,所以这里不能用
- options := [roIgnoreCase, roMultiLine];
- regex := TRegEx.Create(aGuiZhe, options);
- match := regex.match(AInputString);
- if match.Success and (match.Groups.Count > 1) then
- Memo2.Lines.Add(match.Groups[1].Value); // 捕获组第一个下标为1,整个匹配组下标才是0
- end;
复制代码 以上代码简介:
仅匹第一个捕捉组:正则表达式带小括号()的为捕捉组,一句正则表达式语句,假如含有多个小括
号(),那么第一个括号的下标为1也就是第一个捕捉组。
整文全匹:就是在整个原文中找到全部的匹配项,全匹就是不带捕捉组,正则表达式一个语句捕捉组是无效的,全部匹配。
这两种方案根本上可以搞定大部份正则匹配。
别的匹配项和捕捉组是差别的概念,举例分析:
好比我要从这句SQL语句中获取表名:select * from MyTable
我用正则表达式为:FROM\s+(\w+)
匹配项返回的是:from MyTable
捕捉组返回的是:MyTable
|