在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*);
我们还使用需要三个逗号的assertEquals
和assertSame
,但这可能是一个单独的正则表达式。
对此有什么想法或解决方案吗?我们如何找到只有一个参数的 assertFalse(( 语句?
请不要想出任何其他工具或插件,因为它们是禁止使用的。只是纯粹的正则表达式。谢谢。
在此处查看正在使用的正则表达式
assert(?:False|(?:Not)?Null|True)([^(),]*(?:([^)]*))*);
-
assert
从字面上匹配 -
(?:False|(?:Not)?Null|True)
匹配False
、NotNull
、Null
或True
-
(
从字面上看(
比赛 -
[^(),]*
匹配除(
、)
或,
之外的任意数量的字符 -
(?:([^)]*))*
匹配以下任意次数- 匹配
(
,后跟除)
以外的任何字符任意次数,然后是)
- 匹配
-
);
比赛);
字面意思
但是,要正确捕获这些实例,最好编写一个解析器,因为 Java 的正则表达式引擎不允许递归或平衡。这意味着正则表达式(如我提供的正则表达式(将在()
(例如 assertFalse(something(somethingelse()));
(中的嵌套()
中断。如果你不关心这些情况,那么你可以使用正则表达式,否则,我建议你创建一个解析器或使用其他方法。