2013-01-02 60 views
0

我使用的,如果类型(if\()(.*)(?!\{)正则表达式查找所有的“如果”没有声明“{”

似乎并不奏效......

例子:

if((Collection.containsKey(primaryKeyValue))) {

此外,我要排除else if

+3

正则表达式不是真正的票。如果你有例如Perl或Python,你可以在整个文件中使用他们对字符串的多行regex支持,但是你也可以为'if'语句定义一个简单的解析器,或者为你的目标语言找到一个语法。 – tripleee

+1

你的课程是什么? perl(或任何PCRE)? VI? Emacs的? JavaScript的? – dan3

回答

3

此正则表达式匹配(大部分时间)if声明,没有使用{;结束:

\bif\s*\([^\{]+; 

\b是字边界,以确保如果是单独的,而不是另一个词的一部分等ZIF)。

但是,这个正则表达式是不可靠的。其实,任何正则表达式解决方案在这里不能100%可靠,因为您匹配的字符可以存在于if条件内的字符串中。

考虑这个例子 - 它不会通过上述正则表达式,而这显然是罚款由您的规则:

if (s.equals(";{;};")) { t="({;})"; } 

而且它会通过这个例子,这是不对您的规则:

if (s.equals("{;}")) t="({;})"; 

如果你想在这里坚如磐石的表现,你必须编写你自己的代码解析器。

+0

+1表示何时无法工作:) – exexzian

3

没有范围的if需要由;终止。所以你可以在{之前检查一下if之后是否有;。这个正则表达式应该这样做:

(if[^{;]*;) 

请注意,这需要多行正则表达式。

相关问题