使用正则表达式从源代码中提取逗号分隔的单元

Extract comma separated units from source code using RegEx

我想使用正则表达式从我的源代码中提取信息。你能帮我构建一个 RegEx 来检索源代码中使用的单位吗?

源代码示例:

unit ComandesVendes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Manteniment;

type
  TFComandesVendes = class(TFManteniment,ActualitzacioFinestra)
    QRCapsaleraNumero: TIntegerField;
    QRCapsaleraData: TDateTimeField;
    QRCapsaleraDataEntrega: TDateTimeField;
...
...     

我需要获取从 uses 子句到下一个 ; 的逗号分隔文件名。在该示例中,输出必须是:

Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment

我正在尝试

^ *uses(\n* *(\w*),)* *\n* *(\w*) *;

它匹配 uses 子句,但它不 return 每个文件名分开。

谢谢。

this page 它说 Delphi 使用 PCRE 正则表达式风格。

在这种情况下,一种选择是将捕获组与 \G 锚结合使用。

(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)

说明

  • (?:非捕获组
    • ^ *uses\r?\n * 从字符串的开头匹配可选空格,然后再次匹配一个换行符后跟可选空格
    • |
    • \G(?!^) 断言位置在上一个匹配的末尾,而不是在开始(\G 锚匹配在 2 个位置,要么在字符串的开头,要么在字符串的结尾上一场比赛)
  • )关闭非捕获组
  • (\w+)捕获第1组匹配1+个单词字符
  • (?:,\s*|;$) 非捕获组,匹配逗号和 0+ 个空白字符或匹配字符串末尾的 ;

Regex demo