Использование регулярного выражения для очистки содержимого оператора if, но с сохранением только внешних фигурных скобок - PullRequest
0 голосов
/ 04 ноября 2018

Я хотел бы использовать регулярные выражения с sed, perl или awk на следующие строки кода хранятся в файле, скажем, file.txt:

if(url == "https://abcd.com"){
if(p=123){System.out.println("url is https://....(OK?)); }
else{
//do nothing!
}
c=1;
}

и хотел бы очистить содержимое внешнего оператора if и сохранить фигурные скобки, чтобы получился результат: -

if(url == "https://abcd.com"){}.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Следующий код на Perl поможет вашему примеру

$/ = undef;
my $data = <>;
if( $data =~ /if\(url == \"https:\/\/abcd.com\"\)\{(.+)\}/ms ){
  $inside = $1 ;
  $data =~ s/\Q$inside\E//ms ;
}
print $data ;

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

0 голосов
/ 04 ноября 2018

Это зависит от того, насколько произвольным является код внутри внешних фигурных скобок. Например, это возможности:

if (....) {
    c = '{';
    // this is a mismatched brace: {
}

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

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