全部,源内容可能是这样的:
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路径。
那么谁能帮我写一个高性能的正则表达式呢?
答案 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\\([\"\\'][(?:\\.\\.)]*([^\"\\)]+)[\"\\']\\)";
现在可行。