分离路径的正则表达式

M.S*_*idu 7 java regex

您好我试图使用Java正则表达式从以下路径信息中获取所需的上下文路径.

String path = "/Systems/lenovo/";
Run Code Online (Sandbox Code Playgroud)

我想写正则表达式分别得到"/ 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.
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我Regx可能有什么问题吗?

jon*_*nas 1

您不应该使用此replaceAll方法groups ($3)来获得您想要的东西。

您的方法在幕后发生的事情是:

正则表达式(.*)(/\\w+)([/][\\w+])匹配字符串/Systems/l

您的表达分为以下几组:

$1 => (.*)
$2 => (/\\w+)
$3 => ([/][\\w+])
Run Code Online (Sandbox Code Playgroud)

每个组都匹配匹配字符串的以下部分/Systems/l

$1 => ''
$2 => /Systems
$3 => /l
Run Code Online (Sandbox Code Playgroud)

所以当你这样做时

path.replaceAll("(.*)(/\\w+)([/][\\w+])", "$3")

你本质上是在做

'/Systems/lenovo/'.replaceAll(`/Systems/l`, '/l') => '/lenovo'
Run Code Online (Sandbox Code Playgroud)

当你使用$2

'/Systems/lenovo/'.replaceAll(`/Systems/l`, '/Systems') => '/Systemsenovo/'
Run Code Online (Sandbox Code Playgroud)

因此,使用正则表达式组来完成此任务并没有真正意义,最好使用String.split本页其他人建议的简单方法