使用正则表达式区分字符串中的斜杠

Mia*_*rke 6 java regex

我正在编写的程序(用Java编写)获取由三种部分组成的输入数据,用斜杠分隔/.部件可以是以下之一:

  1. 名称匹配的正则表达式\w*
  2. 呼叫匹配的表达\w*\(.*\)
  3. 路径匹配的表达<.*>|\".*\".一个路径可以包含斜线.

示例字符串可能如下所示:

bar/foo()/foo(bar)/<foo/bar>/bar/"foo/bar"/foo()
Run Code Online (Sandbox Code Playgroud)

具有以下结构

name/call/call/path/name/path/call
Run Code Online (Sandbox Code Playgroud)

我想将这个字符串分成几部分,我正在尝试使用正则表达式.我当前的表达式在调用路径之后捕获斜杠,但是我无法在名称后捕获斜杠而不包括路径中可能存在的斜杠.我当前的表达式,只是在路径调用之后捕获斜杠如下所示:

(?<=[\)>\"])/
Run Code Online (Sandbox Code Playgroud)

如何扩展此表达式以在名称后捕获斜杠而不在路径中包含斜杠?

Tom*_*lak 3

(\w+|\w+\([^/]*\)(?:/\w+\([^/]*\))*|<[^>]*>|"[^"]*")(?=/|$)
Run Code Online (Sandbox Code Playgroud)

从字符串中捕获这个'bar/foo()/foo(bar)/<foo/bar>/bar/"foo/bar"/foo()'

  • 'bar'
  • 'foo()/foo(bar)'
  • '<foo/bar>'
  • 'bar'
  • '"foo/bar"'
  • 'foo()'

不过,它没有捕获分隔斜杠(有什么用? - 假设它们在那里)。

更简单的方法(\w+|\w+\([^/]*\)|<[^>]*>|"[^"]*")(?=/|$)是单独捕获调用:

  • "foo()"
  • "foo(bar)"

编辑:通常,我会进行正则表达式细分:

( # 开始第 1 组(用于交替)
  \w+ # 至少一个单词字符
| # 或者...
  \w+ # 至少一个单词字符
  \( # 一个文字“(”
  [^/]* # 除了“/”以外的任何内容,尽可能多地使用
  \) # 一个文字“)”
| # 或者...
  < # 一个“<”
  [^>]* # 除“>”之外的任何内容,尽可能多地使用
  >#a">"
| # 或者...
  “ # A '”'
  [^"]* # 除了 '"' 以外的任何内容,尽可能多地使用
  “ # A '”'
) # 结束组 1
(?=/|$) # 前瞻:...后跟斜杠或字符串结尾