我想要解析这种方法签名:
.method [list of words than can or cant appear] MethodName([List of params])ReturnType
这里举例说明我需要解析的2个方法签名:
.method Paracasa(Ljava/lang/String;I)V
.method public static OnDone()V
主要问题是.method和MethodName之间出现的单词是否存在,如果存在,我需要捕获它们。我有一个解决方案,但我确信会有一个更清洁的解决方案,我想知道。我的解决方案是
\.method(?:\s+(.*)\s+|\s+)(.+)\((.*)\)\s*(.*)
正如您所看到的,我添加了两个选项,我的意思是,如果出现.method和Methodname之间的这组词,或者它不是。但对我来说似乎很脏。
可以换一种方式吗?
提前致谢。
答案 0 :(得分:0)
\.method\s+(.*?)\s*(\w+)\((.*)\)(\w+)
与你的正则表达式非常相似。
\.method\s+
(.*?) # non-greedy match, matches only extra keywords like public etc.
\s* # so the previous non-greedy match won't match trailing space
(\w+) # I suppose method names can only be alphanumeric or underscore
\((.*)\) # May cause problems if list of params include another parentheses - is no longer "regular" language
(\w+) # Same as with method name, only alphanumeric or underscore?
我最关心的是参数列表中的括号,因为它会使这个问题不适合正则表达式(虽然可能有一些扩展)。
此外,如果您希望更严格地解析方法名称和返回类型,则可以在([A-Za-z_][A-Za-z_0-9]*)
上使用(\w+)
。据我所知,这是大多数语言中标识符名称的常用正则表达式。