Java模式表达式以排除特殊字符串

时间:2013-08-20 06:04:08

标签: java regex

全部,源内容可能是这样的:

String content1 = "url:(\"../../aaa/bbb/ccc\")";
String content2 = "url:('/bb/add/www')";
String content3 = "url:(ggg/eee/xxx)";
String content4 = "url:('../../aaa/bbb/ccc')";

谁能帮我设计一个高性能的Java模式匹配器正则表达式,如下所示:

regex = "^[.]*url\\:\\([\"\\'][(?:\\.\\.)?]([^\"\\)]+)[\"\\']\\)$";

public static String parsePath(String content,String regex) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    if (matcher.find()) {
        return  matcher.group(1);
    }
    return null;
}

我想将content1等输入到内容4,调用parsePath函数将始终返回/ aaa / bbb / ccc,/ bb / add / www,ggg / eee / xxx,/ aaa / bbb / ccc。那就是我想跳过前缀("|'..和postfix '|"),只想用/来捕捉中间实际的url路径。

那么谁能帮我写一个高性能的正则表达式呢?

2 个答案:

答案 0 :(得分:0)

我不确定单一的正则表达式解决方案,但您可以通过双重方法实现相同的目标:

public static String parsePath(String content, String regex) {
    content = content.replaceFirst("^url\\:\\([\"']?([.]{2})?(/[.]{2})*", "");
    // rest is same as previous
    // .......................
}

然后在Matcher中使用以下内容:

  regex = "(^([a-z]+)?(/?[a-z]+)*)(?=[\"']?\\)$)"

您可以将正则表达式放在方法本身中,而不是将其作为参数传递。并根据需要更新角色类([a-z])。

注意:上述解决方案与“url:(\”../..../ aaa / bbb / ccc \“)”“url等字符串不匹配:(\“.... / .. / aaa / bbb / ccc \”)“”url:(\“..///”)“,这不是你在问题和评论中显示的正则表达式处理的。

答案 1 :(得分:0)

最后,我尝试了很多次,并通过设计模式表达式来实现它:

regex = "url\\([\"\\'][(?:\\.\\.)]*([^\"\\)]+)[\"\\']\\)";

现在可行。