Получить ссылки на пакет из файла тела пакета - PullRequest
0 голосов
/ 10 апреля 2019

Я извлекаю некоторую информацию о файлах тела пакета, и теперь мне нужно получить ссылки на пакеты (вызванные пакеты) в одном и том же файле.Как сделать это в Notepad ++ с помощью regex?

Я понимаю, что это возможно с помощью regex, пометив поиск с помощью

pac_\w*

и снимите пометки со строк, но мне нужны только имена пакетов, а нестрок.

Например, если у меня есть эта часть кода:

pac_test1.function1(...);
if pac_finally.f_result then
pac_execute.p_result;
v_load := pac_gui.f_show_result(pnum1, pnum2);
.
.

Я ожидаю получить это:

pac_test1
pac_finally
pac_execute
pac_gui

Или желаемый:

pac_test1, pac_finally, pac_execute, pac_gui

Ответы [ 2 ]

1 голос
/ 10 апреля 2019
  • Ctrl + H
  • Найти что: (?:^|\G).*?(pac_\w+)(?:(?!pac_).)*(\R|\z)?
  • Заменить на: $1,
  • check Обтекание
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Объяснение:

(?:^|\G)        # beginning of line OR restart from last match position
.*?             # 0 or more any character but newline, not greedy
(pac_\w+)       # group 1, pac_ followed by 1 or more word characters, the package
(?:(?!pac_).)*  # Tempered greedy token, make sure we haven't pac_
(\R|\z)?        # optional group 2, any kind of linebreak or end of file

Замена:

$1,         # content of group 1, package, a comma and a space

Дано:

pac_test1.function1(...); pac_test2
if pac_finally.f_result then
pac_execute.p_result;
v_load := pac_gui.f_show_result(pnum1, pnum2);

Результат для данного примера:

pac_test1, pac_test2, pac_finally, pac_execute, pac_gui, 
1 голос
/ 10 апреля 2019

Notepad ++ может оказаться не подходящим инструментом для этой работы, потому что типичный подход, который вы бы использовали, - это поискать что-то вроде pac_[^.]+.Но проблема в том, что АЭС работает, начиная со всей линии, и заканчивая некоторой заменой этой линии.Строки, у которых нет совпадений, необходимо удалить, и это сложно.

Поэтому я рекомендую использовать язык приложений, такой как PHP.Вот скрипт PHP, который может найти все совпадения:

$script = "pac_test1.function1(...);
    if pac_finally.f_result then
    pac_execute.p_result;
    v_load := pac_gui.f_show_result(pnum1, pnum2);";
preg_match_all("/pac_[^.]+/", $script, $matches);
print_r($matches[0]);
echo implode(",", $matches[0]);

Array
(
    [0] => pac_test1
    [1] => pac_finally
    [2] => pac_execute
    [3] => pac_gui
)

pac_test1,pac_finally,pac_execute,pac_gui
...