регулярное выражение, чтобы получить разделенный запятыми список между словом использует и точка с запятой в файле - PullRequest
0 голосов
/ 07 марта 2019

Как видно из заголовка, мне нужно найти все импортированные файлы в файле delphi.Текст выглядит примерно так:

uses X.Y.Z, A.B, C.D.F;  class procedure 

Так что мои совпадения с регулярными выражениями будут такими:

  • XYZ
  • AB
  • CDF

Я знаю, что мне нужно использовать группы захвата для XYZ, но мне удалось получить только первую группу.Между каждой группой захвата могут быть либо пробелы, либо 1, либо несколько новых строк, либо оба.Вот что у меня есть: ^ использует (?: [\ N | \ s] * ([az |. | AZ] +) (?:,) +)

1 Ответ

1 голос
/ 07 марта 2019

Я думаю, что вы должны использовать двухэтапный подход:

Начните с поиска всего исходного файла, захвата строки между:

  • uses (в начале строки) + последовательность пробелов,
  • и ;, завершение списка импорта.

Затем в каждом из приведенных выше совпадений найдите импортированные элементы.

Первое задание можно выполнить с помощью ^uses\s+([a-z.,\s]+); и текст для обработки на следующем шаге является содержанием группа захвата № 1.

На втором шаге, выполняемом в каждом из вышеуказанных матчей, Вы можете использовать [a-z]+(?:\.[a-z]+)*(?=[,;]).

Оба вышеприведенных регулярных выражения должны выполняться с i (case нечувствительный), m (многострочный) и g (глобальный) параметры.

Обратите внимание, что подход с одним регулярным выражением является неправильным, потому что если группа захвата был найден несколько раз, затем процессор регулярных выражений возвращает только последний матч для такой группы.

...