首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

正则表达式~喜欢正则的朋友进

2013-07-01 
求一个正则表达式~喜欢正则的朋友进String s cn测试用户1,ou测试机构1,ou湖北省,ouorg,oessp,ccn

求一个正则表达式~喜欢正则的朋友进
String s= "cn=测试用户1,ou=测试机构1,ou=湖北省,ou=org,o=essp,c=cn";
我想把上面的字符串用正则替换为:
湖北省->测试机构1->测试用户1

需求是:ou=org,o=essp,c=cn可以直接去掉(当然ou=org,o=essp,c=cn之间可能是有空格的)
但ou=xxx的数量是可变的,如字符串也可能是这样:cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省
需要变为:湖北省->测试机构1->测试一部->测试用户1。
希望平时正则用的多的同学帮一把,谢谢。

用java语法实现~ 正则表达式 String
[解决办法]

引用:
Quote: 引用:

看第一个字符串和结果,感觉是想逆序输出。

但是第二个字符串
ou=测试机构1,ou=测试一部

有啥区别么?为啥结果不是:湖北省->测试一部->测试机构1->测试用户1

请给出明确的规则


需求是是去掉结尾的一串英文,然后把剩下的倒序

这个规律性还是挺清晰的,如果不存在其它干扰字符,可以用字符串拼接实现:

    public static void main(String[] args)
    {
        //目标字符串
        String s = "cn=测试用户1,ou=测试一部,ou=测试机构1,ou=湖北省";

        //无用字符存储器//如果是要求所有不能包含字母,就用正则式实现
        List<String> noUseStrs = new ArrayList<String>();
        noUseStrs.add("org");
        noUseStrs.add("essp");
        noUseStrs.add("cn");

        //将所有的空格去掉
        s = s.replaceAll("\\s", "");
        System.out.println("去空格后:" + s);
        String[] firstStepStrs = s.split(",");

        //存放列表
        List<String> allStrs = new ArrayList<String>();
        String temp;
        //循环分离的内容
        for (String contex : firstStepStrs)
        {
            if (contex.indexOf("=") < 0)
            {
                continue;
            }

            temp = contex.split("=")[1];

            if (noUseStrs.contains(temp))
            {
                continue;
            }
            allStrs.add(temp);
        }



        //逆序拼接结果
        StringBuilder sb = new StringBuilder();
        for (int index = allStrs.size() - 1; index > 0; index--)
        {
            sb.append(allStrs.get(index));
            sb.append("->");
        }
        sb.append(allStrs.get(0));

        System.out.println("最終結果:" + sb);

    }



如果存在干扰字符,建议给个更典型的样例吧~
[解决办法]

public static void main(String args[])
{
String s= "cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省";
Pattern pat = Pattern.compile("(?:([\\w]+)=([^=,]+))+\\,?", Pattern.DOTALL);
Matcher mat = pat.matcher(s);
while (mat.find()) {
String tag = mat.group(1);
String value = mat.group(2);
}
}

[解决办法]
6L V5~,简化下正则:

        //目标字符串
        String s= "cn=测试用户1,ou=测试机构1,ou=测试一部,ou=湖北省,cn=com";
        Pattern pat = Pattern.compile("=([^=,]+)");
        Matcher mat = pat.matcher(s);
        while (mat.find()) {
            String tag = mat.group(1);
            System.out.println("value:"+tag);
        }

热点排行