Вставьте отсутствующие запятые в источник C

MD XF спросил: 03 февраля 2018 в 11:01 в: regex

У меня есть скрипт perl (с использованием флага -p), который выполняет некоторые исправления в поврежденном исходном файле C. Вот часть скрипта:

sub remove_sp {
    $_ = shift; 
    s/ /, /g; 
    return $_;
}s/(\([^}]*\))/remove_sp($1)/eg;

Это заменяет пробелы внутри скобки с помощью , например. foo(bar baz) становится foo(bar, baz). Однако это не очень умно. Он также меняет foo("bar baz") на foo("bar, baz"), который явно не то, что я хочу.

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


Вот простая таблица того, что мне нужно и что не работает.

Search                       | Replace                        | Currently handled correctly?
--------------------------------------------------------------------------------------------
foo(bar baz)                 | foo(bar, baz)                  | Yes
foo("bar baz")               | foo("bar baz")                 | No
foo("bar baz" bak)           | foo("bar baz", bak)            | No
foo("bar baz" bak "123 abc") | foo("bar baz", bak, "123 abc") | No

0 ответов