所以目前我正在编写一个ruby脚本来解析我在.class文件上运行javap后给出的列表中的方法名称。我有一种感觉正则表达式(正则表达式)是实现这一目标的唯一方法,但在我尝试之前我想要社区输入。
例如,javap为我提供了以下方法:
public String foo()
public int bar()
我只想从该列表中获取foo和bar,我将如何仅提取它们?正则表达式是最好的方法吗?
答案 0 :(得分:1)
我认为scan
具有正向前瞻(对于左括号)应该可以做到这一点:
method_names = s.scan(/\w+(?=\s*\()/)
例如:
>> "public String foo()\npublic int bar(int)".scan(/\w+(?=\s*\()/)
=> ["foo", "bar"]
这假定Ruby 1.9并且Java方法名称仅包含A-Z,a-z,0-9和“_”。替换\w
更广泛的内容(例如\p{Word}
)将允许使用名称为µü
等的方法。
答案 1 :(得分:0)
如下所示?
/[\w ]+ (.*)\(.*\)/
这将匹配任何一个或多个单词字符(a-z,A-Z,数字和_)以及空格,后跟一个空格和一个单词,后跟括号中的任何单词(.*
)。方法名称本身将位于第一个捕获组($1
)。