RegExを使用して、ソースコードからコンマ区切りの単位を抽出します

Aug 20 2020

正規表現を使用して、ソースコードから情報を抽出したいと思います。ソースコードで使用されているユニットを取得する正規表現を作成するのを手伝ってもらえますか?

ソースコードサンプル:

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句に一致しますが、各ファイル名を個別に返すわけではありません。

ありがとうございました。

回答

6 Thefourthbird Aug 20 2020 at 18:19

で、このページには、DelphiはPCRE正規表現の風味を使用していることを言います。

その場合、1つのオプションは、\Gアンカーと組み合わせてキャプチャグループを使用することです。

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

説明

  • (?: 非捕獲グループ
    • ^ *uses\r?\n * 文字列の先頭からオプションのスペースを一致させてから、改行とそれに続くオプションのスペースを再度一致させます
    • | または
    • \G(?!^)開始時ではなく、前の試合の終了時に位置をアサートします(\Gアンカーは、文字列の開始時または前の試合の終了時に2つの位置で一致します)
  • ) 非キャプチャグループを閉じる
  • (\w+)キャプチャグループ11+単語の文字に一致
  • (?:,\s*|;$)非キャプチャグループ。コンマと0+空白文字のいずれかに一致するか;、文字列の最後に一致します。

正規表現のデモ