使用正则表达式清空if语句的内容,但仅保留外部花括号

时间:2018-11-04 12:39:02

标签: regex perl sed

我想在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 :(得分:0)

这取决于外括号内代码的任意性。例如,以下是可能性:

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

为应对这种可能性,您可能需要解析相关语言而不是正则表达式的内容。

答案 1 :(得分:0)

以下perl代码可以满足您的要求

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

但是,如果在示例末尾有更多代码包含花括号,则可能会失败,因为它正在寻找最后一个花括号并提取目标if语句和最后一个花括号之间的所有内容。