用于查找不完整的 Java 断言的正则表达式



在Java中,你可以使用如下assert((语句:

// ok
assertFalse(",", Boolean.FALSE);
assertFalse("", Boolean.FALSE);
assertFalse("ab" + "cd" + "de", Boolean.FALSE);
assertFalse(errorMessage, Boolean.FALSE);
assertFalse(errorMessage.toString(), Boolean.FALSE);
assertFalse("Assertion failed, because: " + errorMessage.toString(), Boolean.FALSE);
// nok    
assertFalse(Boolean.FALSE);
assertFalse(expectedMessage.endsWith("ab,cd"));

从代码风格的角度来看,如果断言具有断言错误消息作为第一个参数,我们将断言定义为 OK,如果不存在,则 NOK = 不正常

话虽如此,我需要一个正则表达式来搜索没有逗号的断言,在其圆括号中((。字符串常量(用引号分隔(内的逗号也必须排除,因为它们会导致误报。

最终得到了这个正则表达式,它显然没有考虑引号,因为我无法让那些为我工作的人:

assert(False|NotNull|Null|True)(s*.*(?!,).*s*);

我们还使用需要三个逗号的assertEqualsassertSame,但这可能是一个单独的正则表达式。

对此有什么想法或解决方案吗?我们如何找到只有一个参数的 assertFalse(( 语句?

请不要想出任何其他工具或插件,因为它们是禁止使用的。只是纯粹的正则表达式。谢谢。

在此处查看正在使用的正则表达式

assert(?:False|(?:Not)?Null|True)([^(),]*(?:([^)]*))*);
  • assert 从字面上匹配
  • (?:False|(?:Not)?Null|True) 匹配FalseNotNullNullTrue
  • ( 从字面上看(比赛
  • [^(),]* 匹配除(),之外的任意数量的字符
  • (?:([^)]*))* 匹配以下任意次数
    • 匹配 ( ,后跟除)以外的任何字符任意次数,然后是 )
  • ); 比赛);字面意思

但是,要正确捕获这些实例,最好编写一个解析器,因为 Java 的正则表达式引擎不允许递归或平衡。这意味着正则表达式(如我提供的正则表达式(将在()(例如 assertFalse(something(somethingelse()));(中的嵌套()中断。如果你不关心这些情况,那么你可以使用正则表达式,否则,我建议你创建一个解析器或使用其他方法。

相关内容

  • 没有找到相关文章

最新更新