【发布时间】:2016-06-07 10:08:04
【问题描述】:
我想在 grep+perl 中使用正则表达式,以便在 finally 子句中选择 unclosed java 语句。
我想出的模式应该选择所有 .submitBacth();前面没有finally {
但是,由于返回了所有匹配项,因此后面的负面外观似乎并不正确或按预期工作。
myself@mymachine:~/Desktop$ grep -C 3 -P '(?s)(?<!finally\s\{.).*?\.submitBatch\(\)\;' ~/myfile.txt
示例文本(myfile.txt):
//sample text
batch.addToBatchUpdate(item1);
}
batch.submitBatch();
dao.update(item2);
//another text
} finally {
--
}
}
} finally {
impl.submitBatch();
test.close();
}
预期的输出应该是:
//sample text
batch.addToBatchUpdate(item1);
}
batch.submitBatch();
dao.update(item2);
//anotehr text
} finally {
我本来希望只看到第一个条目 batch.submitBatch();但如您所见,两者都返回了。
【问题讨论】:
-
请使用适当的输入字符串和所需的输出字符串来说明您的问题。
-
正则表达式可能是解析上下文语言的错误选择。他们根本做不到。
-
this post中的回答几乎相同