Java 分离路径的正则表达式
您好,我试图使用Java正则表达式从以下路径信息获取所需的上下文路径Java 分离路径的正则表达式,java,regex,Java,Regex,您好,我试图使用Java正则表达式从以下路径信息获取所需的上下文路径 String path = "/Systems/lenovo/"; 我想编写正则表达式来分别获取“/Systems”和“/lenovo” 我使用组尝试了以下正则表达式,但没有按预期工作 String systemString = path.replaceAll("(.*)(/\\w+)([/][\\w+])", "$2") - to get "/Systems" - not working String lenovoStr
String path = "/Systems/lenovo/";
我想编写正则表达式来分别获取“/Systems”和“/lenovo”
我使用组尝试了以下正则表达式,但没有按预期工作
String systemString = path.replaceAll("(.*)(/\\w+)([/][\\w+])", "$2") - to get "/Systems" - not working
String lenovoString = path.replaceAll("(.*)(/\\w+)([/][\\w+])", "$3") - to get "/lenovo" - working.
有谁能告诉我我的注册表有什么问题吗?你可以试试
String PATH_SEPARATOR = "/";
String str = "/Systems/lenovo/";
String[] res = str.substring(1).split(PATH_SEPARATOR);
如果您想在字符串之前保留/
,则只需添加如下内容:
"/"+res[0]
就像这样拆分:
String[] parts = path.replaceAll("/$", "").split("(?=/)");
调用replaceAll()
将删除尾部斜杠(如果有)
看到
生产
/Systems
/lenovo
您可以尝试以下方法:
String path = "/Systems/lenovo/";
String[] arr = path.split("/");
String str1 = "/"+arr[1];
String str2 = "/"+arr[2];
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
结果是:
str1 = /Systems
str2 = /lenovo
您不应该将此
replaceAll
与groups($3)
方法结合使用来获得您想要的东西
在你的方法背后发生的是:
regex(.*)(/\\w+)([/][\\w+])
匹配字符串/Systems/l
$1 => ''
$2 => /Systems
$3 => /l
表达式分为以下组:
$1 => (.*)
$2 => (/\\w+)
$3 => ([/][\\w+])
每组匹配匹配字符串的以下部分/Systems/l
$1 => ''
$2 => /Systems
$3 => /l
所以当你这么做的时候
path.replaceAll((.*)(/\\w+)([/][\\w+]),“$3”)
你基本上在做什么
'/Systems/lenovo/'.replaceAll(`/Systems/l`, '/l') => '/lenovo'
当您使用$2
'/Systems/lenovo/'.replaceAll(`/Systems/l`, '/Systems') => '/Systemsenovo/'
因此,在这个任务中使用正则表达式组是没有意义的,最好使用简单的
String.split
方法,正如本页其他人建议的那样要获得/Systems,您需要这个正则表达式:(?:\/[^\/]+)
对于/lenovo,您需要:(?:\/[^\/]+){1}(?=\/$)
您可以尝试以下方法(请参阅):
对于这种操作,
模式
是一种更明智的选择。保留/
的聪明方法!
String path = "/Systems/lenovo/";
Pattern p = Pattern.compile("(?:\\/[^\\/]+)");
Matcher m = p.matcher(path);
if(m.find()) {
System.out.println(m.group(0));
}
p = Pattern.compile("(?:\\/[^\\/]+){1}(?=\\/$)");
m = p.matcher(path);
if(m.find()) {
System.out.println(m.group(0));
}