日期:2014-05-18  浏览次数:20707 次

java 正则表达式的应用场景,用法,返回结果等。有经验的都请留下一二。

比如我要过滤sql文件中 /** ... **/ 这样的语句,

如何做到。

正则表达式返回的结果是什么类型,

如何应用,

请提供有价值的参考。


------解决方案--------------------
Java code
aString.replaceAll("/\\*\\*.*?\\*\\*/","");

------解决方案--------------------
2楼漏了包含换行符的情况
参看jdk文档:「.」的说明:
. Any character (may or may not match line terminators)
Java code

public class regexSample {
    public static void main(String[] args) {
        // 被替换字符串中含有\n时
        String aString = "select * from table  \n" + "/** 这里有换行符:\n **/" + "where a=b";
        // regex1解析 是对 regex1 的拆分,以括号来标记匹配思路.1比2多考虑了替换换行符的情况
        // /表示/
        // \\*表示*
        // \\*表示*
        // .表示换行符以外所有字符,\n表示换行符,|表示或关系,*表示出现0或0次以上
        // \\*表示*
        // \\*表示*
        // /表示/
        String regex1解析 = "/(\\*)(\\*)([color=#FF0000](.|\n)*[/color])(\\*)(\\*)/";
        // regex2解析 是对 regex2 的拆分,以括号来标记匹配思路
        // 个人认为这里的?没有啥作用。。。
        String regex2解析 = "/(\\*)(\\*)([color=#FF0000]((.)*)?[/color])(\\*)(\\*)/";
        // 和 regex1解析 等价
        String regex1 = "/\\*\\*[color=#FF0000](.|\n)*[/color]\\*\\*/";
        // 和 regex2解析 等价
        String regex2 = "/\\*\\*[color=#FF0000].*?[/color]\\*\\*/";
        System.out.println("result1 = " + aString.replaceAll(regex1, ""));
        System.out.println("result2 = " + aString.replaceAll(regex2, ""));
    }
}

------解决方案--------------------
javacode不能标颜色,重贴了一遍
String regex1解析 = "/(\\*)(\\*)((.|\n)*)(\\*)(\\*)/";
String regex2解析 = "/(\\*)(\\*)(((.)*)?)(\\*)(\\*)/";
String regex1 = "/\\*\\*(.|\n)*\\*\\*/";
String regex2 = "/\\*\\*.*?\\*\\*/";
Java code

public class regexSample {
    public static void main(String[] args) {
        // 被替换字符串中含有\n时
        String aString = "select * from table  " + "/** 这里有换行符:\n **/" +"/** 这里还有有换行符:\r\n **/"+ "where a=b";
        // regex1解析 是对 regex1 的拆分,以括号来标记匹配思路.1比2多考虑了替换\n的情况
        // /表示/
        // \\*表示*
        // \\*表示*
        // ".表示换行符以外所有字符","|表示或关系,*表示出现0或0次以上","\n表示\n的换行符",
        //        "|表示或关系,*表示出现0或0次以上","\r\n表示\r\n的换行符"
        // \\*表示*
        // \\*表示*
        // /表示/
        String regex1解析 = "/(\\*)(\\*)((.|\n|\r\n)*)(\\*)(\\*)/";
        // regex2解析 是对 regex2 的拆分,以括号来标记匹配思路
        // 个人认为这里的?没有啥作用。。。
        String regex2解析 = "/(\\*)(\\*)(((.)*)?)(\\*)(\\*)/";
        // 和 regex1解析 等价
        String regex1 = "/\\*\\*(.|\n|\r\n)*\\*\\*/";
        // 和 regex2解析 等价
        String regex2 = "/\\*\\*.*?\\*\\*/";
        System.out.println("result1 = " + aString.replaceAll(regex1, ""));
        System.out.println("result2 = " + aString.replaceAll(regex2, ""));
    }
}

}

------解决方案--------------------
上面有的写错了~总之:
① 应该使用 aString.replaceAll("/\\*\\*(.|\n|\r\n)*\\*\\*/");
② 返回值是 String 。。。

------解决方案--------------------

------解决方案--------------------
帮顶下..其实这些都可以去网上搜搜的..我每次遇到JS里正则不会的地方就去网上查。..