想在[Key No. 3] 306654944587896551585198958148中提取出306654944587896551585198958148
我用表达式 (?<=(\d+]\s*))\d+
在RegexTester中测试成功。在java中却不成功
public static void main(String[] args) {
String regEx="(?<=(\\d+]\\s*))\\d+";
String str ="[Key No. 3] 306654944587896551585198958148";

        char[] er =new char[str.length()];
        Arrays.fill(er, ' ');
        Pattern pattern =Pattern.compile(regEx);
        Matcher m =pattern.matcher(str);
        while(m.find()){
         System.out.println(m.group());
         Arrays.fill(er, m.start(),m.end(),'^');
        }
        
        System.out.println(str);
        System.out.println(new String(er)); }没找到匹配项目

解决方案 »

  1.   

    楼主原来是搞.NET还是什么的?看你提问的两个正则问题中用到的语法都是Java中目前不支持的Java中的(?<=expression) 中是不支持不定长度量词的,只支持固定长度表达式和“?”String str ="[Key No. 3] 306654944587896551585198958148";
    String pattern = "\\d+\\]\\s*(\\d+)";
    Matcher m = Pattern.compile(pattern).matcher(str);
    while(m.find())
    {
    System.out.println(m.group(1));
    }
      

  2.   

    我还是学生 呵呵,
    像你所说的Java中目前不支持的正则语法在哪能查到呢?
      

  3.   

    JDK API文档中涉及到一点介绍,但不详细,如果说书的话,可以看一下《精通正则表达式》一些正则和语言结合的细节,是只有在使用过程中才能够体会的