用于匹配/拆分java字节码方法签名元素的正则表达式?

时间:2015-10-13 18:52:47

标签: java regex

这可能超出了正则表达式的效用,但是......

java字节码中的方法签名以(开头,后跟

列表
    每个基本参数的
  • :单字母基本类型代码(I = int,Z = boolean等)
  • 对于每个对象参数:L然后包路径加上分号,例如: Lcom/packagename/Someclass;
  • 对于每个数组参数:[然后是原始代码或对象参数
  • 还要注意数组数组用[[表示,然后是类型代码。嵌套数组可以持续一段时间。例如[[[[I for int [] [] [] []
  • 最后结束)和返回类型的类型代码。

因此public String replace(char c1, char c2, String s) {}的代码为(CC)Ljava/lang/String;

public int[][][][][][][][][][] ouch() {}的代码为()[[[[[[[[[[I

我开始使用这个java正则表达式,它似乎捕获了一些东西,但并不总是有效。另外,我不知道如何捕获Lobject;类型。

\([B-Z]{0,1}|[\[]+[B-Z]{0,1}\)([A-Z]|[\[]+[A-Z])

我正在使用this出色的在线java正则表达式测试程序。

更新:我将稍微简化一下,只考虑parens中的项目而不考虑对象类。

我想出了这个

\((\[*I|\[*S|\[*C|\[*B|\[*F|\[*D|\[*Z)*\)

匹配(ISCBFDZ)(I)(I[[C)(I[C)等内容。但它似乎将ISCBFDZ分组为一个单独的字符串,我不明白。

0 个答案:

没有答案