Java 使用正则表达式区分字符串中的斜杠
我正在编写的一个程序(用Java)获取由三种部分组成的输入数据,用斜杠分隔。这些零件可以是以下零件之一:Java 使用正则表达式区分字符串中的斜杠,java,regex,Java,Regex,我正在编写的一个程序(用Java)获取由三种部分组成的输入数据,用斜杠分隔。这些零件可以是以下零件之一: 与正则表达式匹配的名称\w* 与表达式\w*\(.*) 与表达式\\“*\”匹配的路径。路径可以包含斜杠 示例字符串可能如下所示: bar/foo()/foo(bar)/<foo/bar>/bar/"foo/bar"/foo() 我想把这个字符串分成几个部分,我正试图用正则表达式来实现这一点。我当前的表达式捕获调用和路径后的斜杠,但我很难让它捕获名称后的斜杠,而不包括路径中可能
\w*
\w*\(.*)
\\“*\”
匹配的路径。路径可以包含斜杠bar/foo()/foo(bar)/<foo/bar>/bar/"foo/bar"/foo()
我想把这个字符串分成几个部分,我正试图用正则表达式来实现这一点。我当前的表达式捕获调用和路径后的斜杠,但我很难让它捕获名称后的斜杠,而不包括路径中可能存在的斜杠。我当前的表达式,仅在路径和调用后捕获斜杠如下所示:
(?<=[\)>\"])/
(?\“]))/
如何扩展此表达式以同时捕获名称后的斜杠,而不在路径中包含斜杠?我的第一个想法是将斜杠与其左侧偶数个引号进行匹配(即,对类似于
(“*”)*
的内容进行正面查看,但最终会出现以下异常:
Look-behind group does not have an obvious maximum length
老实说,我认为您最好使用
匹配器
,使用组件的or:ed版本(类似于\w*\w*\(.*\)(|\“*”)
)和while(Matcher.find())
在输入中使用字符串的清除器时,不转义它可能不是最好的选择。但是,在规则模式中使用“假”斜杠确实是一种奢侈。我建议
我强烈建议你考虑在你的路径中逃避“/”以使你的生活更容易。
< P>单独捕获示例字符串的所有部分,而不将定界符包含在结果中:(\w+|\w+\([^/]*\)(?:/\w+\([^/]*\))*|<[^>]*>|"[^"]*")(?=/|$)
\w+\(.*?\)|<.*>|\".*\"|\w+
\w+\(.*?\)\124; | \“*\”\w+
如果您还准确地说出了示例字符串的正则表达式匹配应包含的内容,那将非常有帮助。@Tomalak我想捕获部分之间的斜线,以便我可以拆分字符串。如果您使用我建议的表达式,则无需拆分字符串-只需使用匹配项即可。;)@是的,当我读到你和艾奥贝的答案时,我意识到了这一点。这证明了征求他人意见的价值。非常感谢。
( # begin group 1 (for alternation)
\w+ # at least one word character
| # or...
\w+ # at least one word character
\( # a literal "("
[^/]* # anything but a "/", as often as possible
\) # a literal ")"
| # or...
< # a "<"
[^>]* # anything but a ">", as often as possible
> # a ">"
| # or...
" # a '"'
[^"]* # anything but a '"', as often as possible
" # a '"'
) # end group 1
(?=/|$) # look-ahead: ...followed by a slash or the end of string
\w+\(.*?\)|<.*>|\".*\"|\w+