正则表达式 java报错Unknown inline modifier near index 7

其实就是这一句
String reg = "\d{5}(?(?=-)-\d{4})";
运行显示
Exception in thread "main" java.util.regex.PatternSyntaxException: Unknown inline modifier near index 7
\d{5}(?(?=-)-\d{4})
这个是正则表达式必知必会上的例子,
从文本
11111
22222
33333-
44444-4444
匹配124.
为什么会报错呢?

多谢啊!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ZhengZe {

public static void main(String[] args) throws Exception {
    FileReader f = new FileReader(new File("C:/abcd.txt"));
    BufferedReader br = new BufferedReader(f);
    String reg = "\\d{5}(?(?=-)-\\d{4})";
    Pattern p = Pattern.compile(reg);
    String s;
    FileWriter fw = new FileWriter(new File("c:/output.txt"));
    BufferedWriter bw = new BufferedWriter(fw);
    while ((s = br.readLine()) != null) {
        Matcher m = p.matcher(s);
        if (m.find()) {
            System.out.println(m.group());
            bw.write(m.group()+"\r\n");

        }

    }
    br.close();
    bw.close();

}

}

Java不支持这种语法
http://www.regular-expressions.info/conditional.html

 String zip = "11111 22222 33333- 44444-4444";
String regex = "\\d{5}(?=(-\\d{4}|\\s|$))(-\\d{4})?";
Matcher m = Pattern.compile(regex).matcher(zip);
while(m.find())
    System.out.printf("Macthed: [%s]%n", m.group(1));

斜杠要写两个才可以。

测试:
http://tool.oschina.net/regex

 \\

斜杠等特殊字符的转义,要门直接用实体表示,要么就用 “\” 转义