【问题标题】:Regular expression for string between escape characters转义字符之间的字符串的正则表达式
【发布时间】:2013-12-26 08:32:36
【问题描述】:

我有一个字符串,我想提取转义字符之间的子字符串。

例如

   AC001 (\\Test123\homedir$) (H:)

如何在 java 中获取 Test123

【问题讨论】:

  • 三个提示:1) . 匹配任何字符 2) 用括号 () 创建一个新组。 Matcher 类支持查询此类组。 3) 要将. 用于第一个转义字符之前和第二个转义字符之后的任何字符串,您应该使用非贪婪搜索。没有非贪婪. 正在吃任何字符:)

标签: java regex substring


【解决方案1】:

没有正则表达式你可以这样做:

String str = "AC001 (\\\\Test123\\homedir$) (H:)"; 
String substr = str.substring(str.indexOf('\\')+2, str.indexOf('\\', str.indexOf('\\')+2));
//=> Test123

【讨论】:

  • 没关系,直到你得到:\\Test123\\Test456\\Test789\\homedir$
【解决方案2】:
String s = "AC001 (\\Test123\homedir$) (H:)";

s = s.substring(s.indexOf('\\') + 2);
s = s.substring(0, s.indexOf('\\'));

System.out.println(s);

【讨论】:

    【解决方案3】:

    试试,

        String input = "AC001 (\\Test123\\homedir$) (H:)";
        String regex="(\\\\.*\\\\)";
        Pattern ptrn = Pattern.compile(regex);
        Matcher mtchr = ptrn.matcher(input);
        while (mtchr.find()) {
            String res=mtchr.group();
            System.out.println(res.substring(1, res.length()-1));
        }
    

    【讨论】:

      【解决方案4】:

      一行:

      String middle = str.replaceAll(".*\\\\(.*?)\\h.*", "$1");
      

      此正则表达式匹配整个字符串,但捕获目标,该目标是使用反向引用返回的。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 2020-10-19
        相关资源
        最近更新 更多