正则表达 匹配方法

正则表达 匹配方法

部分内容已经消失

可以看到getter方法和setter方法已经从代码之中移除出去了,这样我们写文章的时候代码比较紧凑,便于阅读.

不足的地方

这个正在表达式不适合方法体之中存在代码快的情况.因为它以}作为方法的介绍标记.但是如果此时方法体重存在}这个符号,将不会匹配成功.

改进

上面的代码并不能匹配到方法体之中有嵌套的代码块的情况.

匹配正则

1
public\s+(?:\w+(?:\s+)?)+\((?:\,?\s*\w+\s+\w+)*\)(\s+)\{(?:(?:\n|\r\n).*)*?\1\}

上面正则判断方法的代码如下:

1
(\s+)\{(?:(?:\n|\r\n).*)*?\1\}

通过匹配方法体开始标记(\s+)\{和结束标记\1\}前面的空格判断方法体的开始和结束位置.匹配效果如下图:
这里有一张图片
这样就可以匹配到如下所示的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static String oneArg(String arg1)
{
//从剪贴板获取文本
String text=SysClipboardUtil.getSysClipboardText();
// 删除空行
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
switch (arg1)
{
//省略...
}
return text;
}
public static String noArg(String text)
{
// 删除无用的空行
text = text.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
return text;
}

新的问题

好的现在又引入了新的问题,如果是下面的代码:

1
2
3
public void setName(String name) {
this.name = name;
}

上述正则将无法匹配到.因为方法体开始符{前面只有一个空格,而结束符前面却有4个空格。
嗯,这个事情暂且搁置.就让自己手动现在使用哪种方式吧.

匹配getter setter方法

1
public\s+\w+\s+(?:set|get)\w+\((?:\,?\s*\w+\s+\w+)*\)(\s+)\{(?:(?:\n|\r\n).*)*?\1\}

匹配效果如下图图所示:
这里有一张图片

在线正则表达式匹配工具

http://tool.chinaz.com/regex/