求一正则表达式

梦如风 2011-11-21 05:19:51
对正则不太熟,现在需要实现如下描述功能;
function saveData(){
var sid="10001";
save();
}
现要求save()函数后不能存在有效代码,例如
function saveData(){
var sid="10001";
save();
alert("save");//保存后的提示
}
不能存在alert("save");但可以存在注释“保存后的提示”;
请熟悉正则的朋友给个思路,用其他方法实现也行,谢谢!!
...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-11-22
  • 打赏
  • 举报
回复
最好的做法还是自己做语法解析,逐行扫描判断
因为注释,空白的情况太多,正则不一定考虑周全
给段代码例子
public class Test {
public static void main(String[] args) throws Throwable {
String separator = System.getProperty("line.separator");
String content = "function saveData(){" + separator +
" var sid=\"10001\";" + separator +
" test1();" + separator +
" save(); //test2" + separator +
"/*\ntest3\n*/" + separator +
"//test4" + separator +
//" test2();" + separator +
"}";
content = content.replaceAll("(?s).*?save[(][)];(.*?})", "$1"); //获取save()后面的字符串
//System.out.println(content);
if (content.matches("((\\s*//.*?\\s+)*((?s)\\s*/
  • .*?
  • /\\s*
  • )*)*\\s*[}]")) {
    System.out.println("ok"); //判断save后面的字符串是不是注释或空白
    } else {
    System.out.println("error");
    }
    }
    }
magong 2011-11-22
  • 打赏
  • 举报
回复
注释还要分行注释、块注释、多个注释、空几行注释,等等,还是很麻烦的。
楼主就规定save();后只能是空白符与},这样简单些。
如下:
String source = "function saveData(){\n var sid=\"10001\";\n save(); \n \n}";
String reg = "(?s).*save\\(\\);(?=[\\s]*[}]).*"; // save();后只允许}结束,允许夹杂空白字符和换行符
System.out.println(source.matches(reg));
source = "function saveData(){\n var sid=\"10001\";\n save(); \n//sample \n}";
System.out.println(source.matches(reg));
OPPPPOP 2011-11-22
  • 打赏
  • 举报
回复
可以换个思路 在save后 加/* +原有代码+ */这样就把所有的有效加注释代码 给注释掉了
梦如风 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 canghaiguzhou 的回复:]
如果只针对你这个具体案例, 你就判断,save();之后 要么是空白符+},要么是空白符+注释+空白符+} 就行了
[/Quote]
能写个具体表达式参考下吗,不好意思,对正则不太懂,现在没时间深入研究了
zx8813443 2011-11-21
  • 打赏
  • 举报
回复
如果只针对你这个具体案例, 你就判断,save();之后 要么是空白符+},要么是空白符+注释+空白符+} 就行了
梦如风 2011-11-21
  • 打赏
  • 举报
回复
那再简单点,save()后面只能存在注释,其他的代码不管是否有效都不能存在
fainfy 2011-11-21
  • 打赏
  • 举报
回复
难......
magong 2011-11-21
  • 打赏
  • 举报
回复
如果要考虑“有效代码”,那可就超级麻烦了。你需要考虑分析语法树了。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧