【发布时间】:2021-07-10 20:14:53
【问题描述】:
我的字符串是"T1/T2\/T3/T4\\/T5\\"
我的预期输出是"T1","T2/T3","T4\", "T5\"(使用 / 分割)。如果 / 以 \ 为前缀,则 / 被视为字符串字符而不是分隔符。
我按照下面的代码,`
String pattern = "((?!/)(\\/|[^/])+(?=/)?)+";
Pattern r = Pattern.compile(pattern);
String path = {getting from request}; //Raw type T1/T2\/T3/T4\\/T5\\
Matcher m = r.matcher(path);
while (m.find()) {
System.out.println(m.group(0));
}`
我的结果是"T1/T2/T3/T4\/T5\" 这不是预期的输出。
如何更改我的正则表达式以使其产生预期的结果?
在后端我的字符串会因为我发送而改变?
【问题讨论】:
-
你可以使用
String pattern = "(?:\\\\.|[^/\\\\])+"; -
我试过了。输出 "T1","T2","T3",T4"。
-
您需要确保您的字符串中确实有一个
\/字符串。试试String path = "T1/T2\\/T3/T4";。 -
\\ 在 java 中(在字符串中)表示单个 \。您需要在正则表达式中有两个 \ 以匹配单个 \ 因为 \ 是用于指示其他内容的特殊字符 - 所以
(\\\\|[^/])+将正常工作。当我尝试它时,我得到了 3 行 - T1、T2\/T3 和 T4 -
你似乎想赶上这些团体。对于拆分,我建议使用 w3docs.com/snippets/java/how-to-split-a-string-in-java.html 我不是 java 程序员,但我认为模式应该类似于 (?