【问题标题】:Java Regular Expression using slash使用斜线的 Java 正则表达式
【发布时间】: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 程序员,但我认为模式应该类似于 (?

标签: java regex string


【解决方案1】:

如果您传递 文字字符串 T1/T2\/T3/T4 作为输入,您可以使用

String path = "T1/T2\\/T3/T4"; // <-- Note how the string must be coded in Java
String pattern = "(?s)(?:\\\\.|[^\\\\/])+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(path);
    while (m.find()) {
    System.out.println(m.group(0));
}
// => T1
//    T2\/T3
//    T4

请参阅 Java demoregex demo

详情

  • (?s) - Pattern.DOTALL 标志选项
  • (?:\\.|[^\\/])+ - 一个非捕获组,一个或多个匹配两种模式之一的事件:
    • \\. - 任何单个字符都用反斜杠转义
    • [^\\/] - 除/ 和反斜杠之外的任何字符。

【讨论】:

    【解决方案2】:
    import java.util.Scanner;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Regex
    {
        public static void main(String[] args)
        {
            String pattern = "((?!/)(\\\\/|[^/])+(?=/)?)+";
            Pattern r = Pattern.compile(pattern);
            String path = args[0];
            Matcher m = r.matcher(path);
            while (m.find()) {
                System.out.println(m.group(0));
            }
        }
    }
    

    【讨论】:

    • 其实我的要求不一样。更新了问题以供理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多